作者:极光高级测试工程师——王素花&杨莞武

  1. 需要背景
    通过介绍locust分布式负载测试工具的应用办法,让大家能疾速把握性能测试的根本办法,进步工作效率
  2. 术语解释
    性能测试定义:指通过自动化测试工具模仿多种失常,峰值以及负载条件对系统的各项性能指标进行测试
    响应工夫:测单接口的性能,响应工夫能够简略了解为用户发送一个申请到服务器返回的响应数据这段时间就是响应工夫。
    并发用户数:某一物理时刻同时向零碎提交申请的用户数,提交的申请可能是同一个场景,也能够是不同场景。
    TPS: 全拼是Transaction per second,每秒事务数;测单接口的性能,一个事务能够了解为一个客户机向服务器发送申请而后服务器做出反馈的过程。
    单推: 下发一条音讯只推送一个用户id (多个用户收到音讯是通过推送多条音讯来实现的)
    多推:一条推送音讯能够同时推送多个用户id。(多个用户收到音讯是通过一条音讯来实现的)
  3. 测试策略
    3.1 需要剖析:
    针对需要,现需测试下列几个场景:
    应用域名单推,查看发送的最大TPS
    应用域名多推,查看发送的最大TPS

3.2 测试方法
1 、性能测试的后期筹备:
剖析业务场景:场景内容有哪些,范畴较广,可与开发、产品,探讨确定本次测试的范畴
分析测试策略:失去设计的测试场景有哪些
剖析生产环境
抉择测试工具:用什么形式来测试性能

2 性能测试的目标:
性能测试则通过提前模仿场景压力,发现零碎中可能的瓶颈,进行零碎调优,缩小服务器宕机的危险
性能测试还能够用来评估待测软件在不同负载下的零碎负载能力,为零碎部署,提供性能数据决策

3 性能降落曲线分析法:
性能随用户数增长而呈现降落趋势的曲线,如图所示:

蓝线示意 TPS,黄色示意响应工夫
在 TPS 减少的过程中,响应工夫一开始会处在较低的状态,也就是在 A 点之前。接着响应工夫开始有些减少,直到业务能够接受的工夫点 B,这时 TPS 依然有增长的空间。再接着减少压力,达到 C 点时,达到最大 TPS。咱们再接着减少压力,响应工夫接着减少,但 TPS 会有降落。

3.3 测试工具
应用分布式压测工具locust

3.4 测试环境

3.4.1 压测数据流程图

3.4.2 被测系统
API服务为双机双节点部署形式,相干依赖服务部署也都部署在这台服务起上,且都是双节点
服务器资源:4核16G
应用域名压测:域名通过lbs转发到服务器

4 测试工具Locust
4.1 简要
JMeter和LoadRunner性能测试工具,是比拟老牌的,都是通过线程来作为虚构虚构用户,而Locust是基于协程实现并发用户的,协程是比线程更小的单位,也称为子线程,在一个线程中能够运行多个协程。所以基于协程的Locust,在进行分布式部署时,不仅能够进行多机压测部署,而且还能够在一台宿主机中实现

4.2 压测工具:locust,版本:0.14.5

4.3 Locust本地宿主机部署步骤
1.首先咱们须要通过python+locust写出程序须要运行的ABC.py文件

脚本阐明:
新建一个类TPush(TaskSet),继承TaskSet,该类上面写须要申请的接口以及相干信息; self.client调用get和post办法,和requests一样;
@task装璜该办法示意为用户行为,括号外面参数示意该行为的执行权重:数值越大,执行频率越高,不设置默认是1;
on_start办法:当模仿用户开始执行该 TaskSet 类时,将调用该办法;
WebsiteUser()类用于设置生成负载的根本属性:
tasks:指向定义了用户行为的类;
min_wait:模仿负载的工作之间执行时的最小等待时间,单位为毫秒;
max_wait:模仿负载的工作之间执行时的最大等待时间,单位为毫秒。

2.创立locust运行的master:
写好须要运行的locust文件之后,咱们须要先利用命令“locust -f xxxx.py --master”创立一个master,这个master不参加创立并发用户的工作,它次要是进行监听以及收集统计数据.

2.1 提供给web端,咱们齐全能够利用python当中的os的system函数间接编写出cmd命令进行运行

2.2 应用no-web,也能够利用python当中的os的system函数间接编写出cmd命令进行运行

当然也能够间接输出命令执行

此时咱们运行py文件,能够看到以下的信息,则阐明咱们曾经启动了locust分布式的主节点master

3.创立locust运行的slave
咱们就能够创立用于制作并发用户的分支节点slave了,办法就是复制master的文件,而后批改一下文件名称,肯定要保障slave运行的文件与master文件是一样的,本人的机器有多少个cpu就能够弄多少个slave,个别一个slave会应用一个cpu创立并发用户
ABC.py ABC_slave1.py 3.1 而后每个slave文件中须要在主函数中输出cmd命令

3.2 也可间接输出命令执行slave

运行多个slave,能够查看以下内容来判断分布式是否部署胜利

当开启全副slave后,能够查看master的控制台信息,看到上面的信息则示意locust分布式部署胜利了

4、关上web端同样也能够查看到分布式的slave
登陆页面

启动压测前,须要填写用户总数(Number of total users to simulate)、每秒减少的用户数(Spawn rate)以及域名(HOST)。
每秒减少的用户数(Spawn rate)会在用户数达到用户总数(Number of total users to simulate)时进行减少。
查看slave节点数

由上图能够看出slave都存于running状态,且压力散布平均。
测试后果数据下载

在locust当中应用web模式进行压测时是没有方法设定执行工夫的,所以web模式下的压测会始终运行,直到点击stop能力运行,如果想在web模式下运行压测一段时间主动进行的话,那么须要在参数配置时退出stop_timeout参数即可,value值是执行的工夫(单位是s)
class websitUser(HttpLocust):
task_set = Login #定义须要执行的工作集
min_wait = 1000 #最小等待时间
max_wait = 2000 #最大等待时间
stop_timeout = 60 # 进行的工夫

5 通过locust可视化界面判断接口性能瓶颈
在总用户数为100,每秒减少1个用户的状况下运行一段时间,咱们查看locustweb界面:

发现tps稳固停留在某个数值(9.8),这时候咱们点击Charts查看TPS、提早和用户数的详情分布图

能够看出在TPS在10之前,随着用户数的减少而减少;但减少到10之后,用户数再怎么减少tps仍然稳固在10左右,只有提早在减少;
再查看服务器性能

能够看出cpu都被该程序占用,那么咱们能够初步认为该接口的tps为10,且瓶颈在cpu上。

6.数据采集实操
单推接口:/single

多推接口:/mutiplie

  1. 数据分析
    压测时内存耗费没有cpu耗费显著。从零碎稳定性思考,须要思考服务不挂,稳固状况下的性能指标。须要对数据采集进行剖析,剖析得如下论断:
    单推:每秒减少用户数为3,并发用户数为160,cpu耗费在80%左右来继续压测得出上面的性能各项指标。
    多推:每秒减少用户数为2,并发用户数为120,cpu耗费在78%左右来继续压测得出上面的性能各项指标。
    注:(多推时,思考到body的大小,deviceTokens设置3个数,对接口来说无差别,在数据落地时才耗费资源,另外借助单推的教训和多推的零碎逻辑,简略能够定位出多推的资源耗费。所以数据采集绝对少些。)

8.测试论断

单推接口: 接口TPS压测后果为 1757/s,90%申请能够在 0.1 秒内响应,因线上 部署多台机器,所以该 tps 只限以后配置和部署的状况下,次要瓶颈是设施降级;
多推接口: 接口TPS压测后果为 1342/s,90%申请能够在 0.1 秒内响应,因线上部 署多台机器,所以该 tps 只限以后配置和部署的状况下,次要瓶颈是设施降级;

文章援用的数据,仅代表特定压测环境下的服务体现