安装
安装 Locust:
1 | pip3 install locust |
查看版本
1 | locust -V |
基本用法
示例代码
1 | from locust import User, events, task, between |
执行
1 | locust -f test4.py --autostart --autoquit 0 -u 1 -r 3 --run-time 10s |
其中
request_type
应该是请求的方式,这里为了方便理解,直接使用的[Success]
和[Fail]
,来区分成功的请求和失败的请求,只有成功或失败的回调被调用后,locust才会对其统计。@task(2)
里面的数字是权重。wait_time
是两个任务之间的间隔时间,如果不设置则会尽可能快的执行。wait_time = between(1, 5)
间隔是1-5秒随机值wait_time = constant(1)
间隔固定1秒
注意:
所有的task不能是异步方法。
结果
TaskSet
如果你正在测试一个网站的性能,这个网站是以分层的方式构建的,包括部分和子部分,那么以同样的方式构建负载测试可能会很有用。为此,locust提供了任务集类。它是将执行的任务的集合,与直接在用户类上声明的任务非常相似。
1 | from locust import User, TaskSet, constant,task |
执行
1 | locust -f test5.py --autostart --autoquit 0 -u 1 -r 3 --run-time 10s |
也可以这样写
1 | class MyUser(User): |
SequentialTaskSet
SequentialTaskSet是一个任务集,其任务将按照声明的顺序执行。可以在任务集中嵌套顺序任务集,反之亦然。
1 | from locust import User, SequentialTaskSet, constant,task |
执行
1 | locust -f test6.py --autostart --autoquit 0 -u 1 -r 3 --run-time 60s |
先后顺序
1 | from locust import User, SequentialTaskSet, constant, task |
从结果看
a,b,c三者并没有先后的执行循序
ASet和BSet内是按照循序执行的
ASet和BSet执行的概率为2:1
接口压测
在当前目录下创建locustfile.py
文件
1 | import random |
运行
1 | locust |
注意
Locust 会默认查找当前目录下名为
locustfile.py
,如果该文件不在当前文件夹或者你取了其他的名字,就需要加上下面的-f
参数了。
比如
1 | locust -f locust_files/my_locust_file.py |
网页上访问
连接WS
压测WS前我们要先看看怎么连接WS
连接WS的库有的是支持异步IO的,项目中我们推荐这样的库,但是压测时还是要选择同步的库。
异步
安装依赖
1 | pip install websockets |
代码示例
1 | import asyncio |
同步
官网地址
https://pypi.org/project/websocket-client/
安装
1 | pip install websocket-client |
示例
1 | from websocket import create_connection |
或者
1 | import websocket |
Websocket压测
Jmeter要测试websocket接口,需要先下载安装一个websocket samplers by peter doornbosch
的插件
而locust因为是代码实现,所以可以进行任何的测试,引用相应的库即可。
1 | from locust import User, task, events |
测试
1 | locust -f main.py -u 5000 -r 300 |
网页上访问
或者不用图形化界面
1 | locust -f main.py --autostart --autoquit 0 -u 1 -r 3 --run-time 10s |
其中
--autostart
自动开始 不使用WebUI--autoquit 0
和autostart
搭配使用,测试完成后多长时间退出,后面的数字单位是秒,如果不设置只能CTRL+C才能退出-u 1
最大用户数-r 3
每秒创建的用户数,创建用户数和最大用户数一样后就不再创建--run-time 10s
压测的执行时间