一个locustfile中有多个User
from locust import task, HttpUser
class User01(HttpUser):
weight = 3 # 权重
host = 'https://www.baidu.com'
@task
def user_01_task(self):
self.client.get(url='/', name='user_01_task')
class User02(HttpUser):
weight = 1 # 权重
host = 'https://www.qq.com'
@task
def user_02_task(self):
self.client.get(url='/', name='user_02_task')
- 两个User定义了
host
,运行时就可以不填host
- 定义了
weight
,和上一节task设置到权重一样,运行时user分配比重按照3:1执行
![](https://img2023.cnblogs.com/blog/2216810/202307/2216810-20230728140815868-995112431.png)
![](https://img2023.cnblogs.com/blog/2216810/202307/2216810-20230728140830508-926060425.png)
使用--class-picker指定执行
- 运行locust的命令使用--class-picker参数,启动web-ui时可以手动选择执行的UserClasses
$ locust -f locustfiles/multiple_user.py --class-picker
![](https://img2023.cnblogs.com/blog/2216810/202307/2216810-20230728140835150-875137192.png)
- 如果是no-ui模式下,也可以在命令中直接指定执行的UserClasses,例如
$ locust -f locustfiles/multiple_user.py --class-picker User02 User01 --headless -u 20 -r 20 -t 5s
[2023-07-28 12:17:00,956] HUAWEI-MateBook-X-Pro.local/INFO/locust.runners: Ramping to 20 users at a rate of 20.00 per second
[2023-07-28 12:17:00,957] HUAWEI-MateBook-X-Pro.local/INFO/locust.runners: All users spawned: {"User01": 15, "User02": 5} (20 total users)
- 命令参数解释一下
- --headless no-ui模式执行,并且立即开始测试
- -u 指定运行最大并发用户数
- -r 每秒启动用户数
- -t 执行测试的时长
小结
- 一个locustfile中可以定义多个测试User类,默认执行比例都是1:1,可使用
weight
属性修改它们的执行比重
- 当一个locustfile中有多个User类,可以使用--class-picker命令参数来选择到底执行哪些User类来执行测试
- 这里提到了no-ui执行,因为一般到实际工作我们压测是在云服务器执行,locust一样提供了--headless命令来通过no-ui执行
- User类中给host赋值后,我们不需要在运行时再给locust设置host
- locust的更多使用命令参数,建议可以仔细阅读一遍,通过
locust -h
来查看