一、locust介绍
1、定义
Locust是一款易于使用的分布式负载测试工具,完全基于事件,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gevent使用轻量级过程(即在自己的进程内运行)。
2、特点
①、不需要编写笨重的UI或者臃肿的XML代码,基于协程而不是回调,脚本编写简单易读;
②、有一个基于we简洁的HTML+JS的UI用户界面,可以实时显示相关的测试结果;
③、支持分布式测试,用户界面基于网络,因此具有跨平台且易于扩展的特点;
④、所有繁琐的I / O和协同程序都被委托给gevent,替代其他工具的局限性;
3、locust与jmeter的区别
工具
区别
jmeter
需要在UI界面上通过选择组件来“编写”脚本,模拟的负载是线程绑定的,意味着模拟的每个用户,都需要一个单独的线程。单台负载机可模拟的负载数有限
locust
通过编写简单易读的代码完成测试脚本,基于事件,同样配置下,单台负载机可模拟的负载数远超jmeter
二、locust安装
直接通过命令安装:pip install locust
三、locust使用代码示例
import os
from locust import task, TaskSet, HttpUser, constant
# 任务集 用户行为脚本
class UserBehavior(TaskSet):
@task(1)
def getBasicProfile(self):
# headers根据自己的接口实际情况填写即可
headers = {'content-type': 'application/x-www-form-urlencoded',
'ua': 'xxx',
'Cookie': 'xxx',
}
url = "http://xxx/profile/getBasicProfile.do"
res = self.client.post(url, headers=headers)
print(res.json())
wait_time = constant(1) # 每个用户在每次任务执行之间等待5秒
class WebsiteUser(HttpUser):
tasks = [UserBehavior]
min_wait = 500
max_wait = 1000
host = "http://localhost:8089"
if __name__ == "__main__":
os.system("locust -f %s " % __file__) # 此处导入os,可以在pycharm中直接运行此py文件
新建一个类UserBehavior(TaskSet),继承TaskSet,该类下面写需要请求的接口以及相关信息;
self.client调用get和post方法,和requests一样;
@task装饰该方法表示为用户行为,括号里面参数表示该行为的执行权重:数值越大,执行频率越高,不设置默认是1;
WebsiteUser()类用于设置生成负载的基本属性:
- task_set:指向定义了用户行为的类
- min_wait:模拟负载的任务之间执行时的最小等待时间,单位为毫秒
- max_wait:模拟负载的任务之间执行时的最大等待时间,单位为毫秒
执行代码后,在浏览器访问http://localhost:8089/就能打开UI界面
四、locust的UI界面
1、启动页
Number of users to simulate:设置模拟的用户总数
Hatch rate (users spawned/second):每秒启动的虚拟用户数
Start swarming:执行locust脚本
2、测试结果页
Type:请求类型,即接口的请求方法;
Name:请求路径;
requests:当前已完成的请求数量;
fails:当前失败的数量;
Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒;
Average:平均响应时间,单位为毫秒;
Min:最小响应时间,单位为毫秒;
Max:最大响应时间,单位为毫秒;
Content Size:所有请求的数据量,单位为字节;
reqs/sec:每秒钟处理请求的数量,即QPS;
3、模块说明
New test:点击该按钮可对模拟的总虚拟用户数和每秒启动的虚拟用户数进行编辑;
Statistics:类似于jmeter中Listen的聚合报告;
Charts:测试结果变化趋势的曲线展示图,分别为每秒完成的请求数(RPS)、响应时间、不同时间的虚拟用户数;
Failures:失败请求的展示界面;
Exceptions:异常请求的展示界面;
Download Data:测试数据下载模块, 提供三种类型的CSV格式的下载,分别是:Statistics、responsetime、exceptions;
五、测试结果数据整理
背景:
接了一个需求,我们后台接入了华为云,因为之前用的是腾讯云,所以挑了一些线上重要且访问量大的接口,做了一个华为云与腾讯云接口响应时间的性能对比。(其实刚做出这个数据报告的时候,开发不是很认同,接下来就是battle了,然后就是开发优化,线上监控)
后来开发做了一些技术优化的需求,优化了一些线上耗时较大的接口,然后也用locust跑了一下,对比优化后的接口与线上接口耗时的对比,看优化效果。
版权归原作者 橘啊橘啊 所有, 如有侵权,请联系我们删除。