Locust简介及实例
1、Locust简介
locust官网: https://www.locust.io/
locust 的官方 Github 是:https://github.com/locustio/locust
官网帮助文档: https://docs.locust.io/en/latest/installation.html
Locust 是一款易于使用的分布式负载测试工具,完全基于事件,即一个 locust 节点也可以在一个进程中支持数千并发用户,不使用回调,通过 gevent 使用轻量级过程(即在自己的进程内运行)。
Locust与LoadRunner、Jmeter这类性能测试工具相对,有如下区别对比:
Locust优点:
1)不需要编写笨重的 UI 或者臃肿的 XML 代码,基于协程而不是回调,脚本编写简单易读;
2)有一个基于 we 简洁的 HTML+JS 的 UI 用户界面,可以实时显示相关的测试结果;
3)支持分布式测试,用户界面基于网络,因此具有跨平台且易于扩展的特点;
4)所有繁琐的 I/O 和协同程序都被委托给 gevent,替代其他工具的局限性;
5)开源免费,支持高并发,方便二次改造,打造性能自动化测试平台。
2、Locust安装
1)通过命令行安装:pip install locust
2)python3版本可通过GitHub上克隆项目安装,地址:https://github.com/locustio/locust ,下载后将文件解压至python的Lib下site-packages文件夹中,cmd窗口进入对应目录执行安装命令:python setup.py install
3)安装pyzmq:
如果打算运行Locust 分布在多个进程/机器,需要安装pyzmq,通过命令行安装:pip install pyzmq
4)安装结果验证:
安装完成后,cmd窗口输入:locust --help查看
3、Locust使用实例
如下demo代码为网站:http://www.runoob.com中多个get接口演示执行效果
4、Locust运行
运行Locust
时,通常会使用到两种运行模式:单进程运行和多进程分布式运行。
1)单进程运行:
Locust
所有的虚拟并发用户均运行在单个Python
进程中,具体从使用形式上,又分为no_web
和web
两种形式。该种模式由于单进程的原因,并不能完全发挥压力机所有处理器的能力,因此主要用于调试脚本和小并发压测的情况。
a)no_web启动locust: locust -f locustfile.py --host = xxxxx.com --no-web -c 1 -n 2
-c, --clients
:指定并发用户数;-n, --num-request
:指定总执行测试次数;-r, --hatch-rate
:指定并发加压速率,默认值位1
b)web启动locust: locust -f locustfile.py --host = xxxxx.com
如果采用web
形式,,则通常情况下无需指定其它额外参数,Locust
默认采用8089
端口启动web
;如果要使用其它端口,就可以使用如下参数进行指定。
-P, --port
:指定web端口,默认为8089
.- 终端中--->进入到代码目录: locust -f locustfile.py --host = xxxxx.com
- -f 指定性能测试脚本文件
- -host 被测试应用的URL地址【如果不填写,读取继承(HttpLocust)类中定义的host】
- 如果
Locust
运行在本机,在浏览器中访问http://localhost:8089
即可进入Locust
的Web管理页面;如果Locust
运行在其它机器上,那么在浏览器中访问http://locust_machine_ip:8089
即可。
c)web模式启动页面展示:
浏览器中打开http://localhost:8089/,显示页面如下:
参数说明:
Number of total users to simulate: 要模拟的用户总数
Spawn rate : 每秒产生的用户数,将多少用户添加到当前用户,直到用户总数
Host:压测接口的host,如果命令行执行中有传参此处会显示传参的host值
2)多进程分布式运行:
当并发压力要求较高时,就需要用到Locust
的多进程分布式运行模式。从字面意思上看,大家可能第一反应就是多台压力机同时运行,每台压力机分担负载一部分的压力生成。的确,Locust
支持任意多台压力机(一主多从)的分布式运行模式,但这里说到的多进程分布式运行模式还有另外一种情况,就是在同一台压力机上开启多个slave
的情况。这是因为当前阶段大多数计算机的CPU都是多处理器(multiple processor cores
),单进程运行模式下只能用到一个处理器的能力,而通过在一台压力机上运行多个slave
,就能调用多个处理器的能力了。比较好的做法是,如果一台压力机有N
个处理器内核,那么就在这台压力机上启动一个master
,N
个slave
。当然,我们也可以启动N
的倍数个slave
,但是根据我的试验数据,效果跟N
个差不多,因此只需要启动N
个slave
即可。
不管是单机多进程
,还是多机负载
模式,运行方式都是一样的,都是先运行一个master
,再启动多个slave
。
a)启动master
时,需要使用--master
参数;同样的,如果要使用8089
以外的端口,还需要使用-P, --port
参数.
b)启动
启动后,还需要启动slave
时需要使用--slave
参数;在slave
中,就不需要再指定端口了。masterslave
才能执行测试任务。
master
和slave
都启动完毕后,就可以在浏览器中通过http://locust_machine_ip:8089进入Locust
的Web管理页面了。使用方式跟单进程web
形式完全相同,只是此时是通过多进程负载来生成并发压力,在web
管理界面中也能看到实际的slave
数量。如果slave
与master
不在同一台机器上,还需要通过--master-host
参数再指定master
的IP地址。
5、Locust测试报告
如下展示demo实例压测结果:
参数说明:
Type :请求的类型,如GET/POST;
Name :请求的路径;
requests :已发出请求数量;
fails :请求失败的数量;
Median :响应时间的中间值(单位:毫秒);
Average :平均响应时间(单位:毫秒);
Min :请求的最小响应时间(单位:毫秒);
Max :请求的最大响应时间(单位:毫秒);
Average size (bytes) 包大小
Current RPS(current requests per second) 当前吞吐率
Current Failures/s 当前故障
Requests per second 吞吐率
tab参数说明:
New test:点击该按钮可对模拟的总虚拟用户数和每秒启动的虚拟用户数进行编辑;
Statistics:类似于jmeter中Listen的聚合报告;
Charts:测试结果变化趋势的曲线展示图,分别为每秒完成的请求数(RPS)、响应时间、不同时间的虚拟用户数;
Failures:失败请求的展示界面;
Exceptions:异常请求的展示界面;
Download Data:测试数据下载模块, 提供三种类型的CSV格式的下载,分别是:Statistics、responsetime、exceptions;