一、了解locust
1、简介
Locust(俗称 蝗虫), 是一款易于使用的分布式负载测试工具,完全基于事件,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gevent使用轻量级过程(即在自己的进程内运行)。【轻量级的开源压测工具,可用Python编写】
2、特点
①、不需要编写笨重的UI或者臃肿的XML代码,基于协程而不是回调,脚本编写简单易读;
②、有一个基于we简洁的HTML+JS的UI用户界面,可以实时显示相关的测试结果;
③、支持分布式测试,用户界面基于网络,因此具有跨平台且易于扩展的特点;
④、所有繁琐的I / O和协同程序都被委托给gevent,替代其他工具的局限性;
3、比较
总结:
得分项:单机并发能力高,支持Python语言,开源免费
掉分项:不支持资源监控,报告异常简单
二、简单使用locust
以下操作基于window系统下使用locust对百度个人设置接口(http协议)进行调试,了解locust的基本使用方法。需提前配置Python运行环境,locust支持的python版本:2.7、3.4、3.5、3.6、3.7和3.8;
1、Windows系统安装locust
有两种方法:
①、通过命令安装:pip install locustio
②、通过为pyzmq、gevent和greenlet安装预先构建的二进制包,然后在找到非官方的预制包,下载.whl文件后,使用 pip install name-of-file.whl 命令安装
安装成功后可以输入 pip show locust 命令查看是否安装成功,以及通过 locust -help 命令查看帮助信息。
注意: 可在Windows上调试测试脚本。在运行大规模测试时,建议在Linux机器上这样做,因为gevent在Windows下的性能很差。
2、编写一个Locust文件
文件名符合规范即可,如basic.py,示例如下
basic.py文件下载:basic.py
脚本解读:
创建myTasks()类继承TaskSet类: 用于定义测试业务。
创建index()方法分别表示行为,访问http://baidu.com。用@task() 装饰该方法为一个任务。
WebsiteUser()类: 用于定义模拟用户。
task_set : 指向一个定义了的用户行为类。
host: 指定被测试应用的URL的地址
min_wait : 用户执行任务之间等待时间的下界,单位:毫秒。
max_wait : 用户执行任务之间等待时间的上界,单位:毫秒。
脚本使用场景解读:
在这个示例中,定义了针对 http://baidu.com 网站的测试场景:访问个人设置页(/my/index),index方法主要用来阐述client对get接口的处理方式(post接口使用类似);并且,在测试过程中,两次请求的间隔时间为0.1->5秒间的随机值。
从脚本中可以看出,脚本主要包含两个类,一个是WebsiteUser(继承自HttpUser,而HttpUsert继承自Locust),另一个是myTasks(继承自TaskSet)。事实上,在Locust的测试脚本中,所有业务测试场景都是在Locust和TaskSet两个类的继承子类中进行描的。
简单地说,Locust类就好比是一群蝗虫,而每一只蝗虫就是一个类的实例。相应的,TaskSet类就好比是蝗虫的大脑,控制着蝗虫的具体行为,即实际业务场景测试对应的任务集。
3、运行Locust文件
locust -f basic.py (在存放文件的目录下执行)
或者在主函数中写执行
4、进入web操作界面
如果是本地启动,可以直接在浏览器输入 localhost:8089 打开UI界面,如果是其他机器搭建locust服务,则输入该机器的IP+端口即可;
参数说明如下:
Number of users to simulate:设置模拟的用户总数
Hatch rate (users spawned/second):每秒启动的虚拟用户数
Start swarming:执行locust脚本
5、查看执行结果
PS:点击STOP可以停止locust脚本运行
Statistics页面:类似于jmeter中Listen的聚合报告
参数说明如下:
Type:请求类型,即接口的请求方法;
Name:请求路径;
requests:当前已完成的请求数量;
fails:当前失败的数量;
Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒;
Average:平均响应时间,单位为毫秒;
Min:最小响应时间,单位为毫秒;
Max:最大响应时间,单位为毫秒;
Content Size:所有请求的数据量,单位为字节;
reqs/sec:每秒钟处理请求的数量,即QPS;
ps: 停止后点击New test可对模拟的总虚拟用户数和每秒启动的虚拟用户数进行编辑;
Charts页面:测试结果变化趋势的曲线展示图,分别为每秒完成的请求数(RPS)、响应时间、不同时间的虚拟用户数;
Failures页面:失败请求的展示界面;
Exceptions页面:异常请求的展示界面;
Download Data页面:测试数据及结果下载模块
6、下载报告
Download Data页面提供三种类型的CSV格式的下载,分别是:request statistics、failures、exceptions;以及一种HTML格式的报告下载。
Request statistics报告(示例)
7、参数说明
-h,
查看帮助
-V, --version
查看当前 Locust 工具的版本.
–host=HOST
指定被测试的主机,采用以格式:http://10.21.32.33
–web-host=WEB_HOST
指定运行 Locust Web 页面的主机,默认为空 ‘’。
–port=PORT, --web-port=PORT
指定 --web-host 的端口,默认是8089
-f LOCUSTFILE,或–locustfile=LOCUSTFILE
指定运行 Locust 性能测试文件,默认为: locustfile.py
–csv=CSVFILEBASE, --csv-base-name=CSVFILEBASE
以CSV格式存储当前请求测试数据。
–headless
禁用web界面,开始测试
–master
Locust 分布式模式使用,当前节点为 master 节点。
–slave
Locust 分布式模式使用,当前节点为 slave 节点。
–master-host=MASTER_HOST
分布式模式运行,设置 master 节点的主机或 IP 地址,只在与 --slave 节点一起运行时使用,默认为:127.0.0.1.
–master-port=MASTER_PORT
分布式模式运行, 设置 master 节点的端口号,只在与 --slave 节点一起运行时使用,默认为:5557。注意,slave 节点也将连接到这个端口+1 上的 master 节点。
–no-web
no-web 模式运行测试,需要 -c 和 -r 配合使用.
-c (-u)NUM_CLIENTS, --clients=NUM_CLIENTS
指定并发用户数,作用于 --no-web 模式。
-r HATCH_RATE, --hatch-rate=HATCH_RATE
指定每秒启动的用户数,作用于 --no-web 模式。
-t RUN_TIME, --run-time=RUN_TIME
设置运行时间, 例如: (300s, 20m, 3h, 1h30m). 作用于 --no-web 模式。
-L LOGLEVEL, --loglevel=LOGLEVEL
选择 log 级别(DEBUG/INFO/WARNING/ERROR/CRITICAL). 默认是 INFO.
–logfile=LOGFILE
日志文件路径。如果没有设置,日志将去 stdout/stderr
–print-stats
在控制台中打印数据
–only-summary
只打印摘要统计
–show-task-ratio
打印 locust 测试类的任务执行比例,配合 -f 参数使用.
–show-task-ratio-json
以 json 格式打印 locust 测试类的任务执行比例,配合 -f 参数使用.