Locust负载测试如何为不同API分配独立用户并配置权重及调用间隔
Locust 分用户组实现指定API测试场景方案
你现有的代码问题在于将所有接口任务放在同一个用户类中,无法实现不同用户组执行不同任务的需求,调整后的实现代码如下:
from locust import User, task, between, TaskSet # 第一组用户任务集:仅调用前5个API,按权重分配 class FirstFiveAPITasks(TaskSet): # 每次调用后固定等待15秒 wait_time = between(15, 15) @task(10) def get_api_1(self): self.client.get("/v1/api_1") @task(50) def get_api_2(self): self.client.get("/v1/api_2") @task(20) def get_api_3(self): self.client.get("/v1/api_3") @task(10) def get_api_4(self): self.client.get("/v1/api_4") @task(10) def get_api_5(self): self.client.get("/v1/api_5") # 第一组用户类:权重设置为3,对应3个测试用户 class FirstGroupUser(User): tasks = [FirstFiveAPITasks] weight = 3 # 替换为你实际的被测服务域名 host = "http://your-api-domain.com" # 以下为后3个API对应的单独用户类,每个类权重为1,各对应1个测试用户 class API6User(User): wait_time = between(5, 5) weight = 1 host = "http://your-api-domain.com" @task def get_api_6(self): self.client.get("/v1/api_6") class API7User(User): wait_time = between(5, 5) weight = 1 host = "http://your-api-domain.com" @task def get_api_7(self): self.client.get("/v1/api_7") class API8User(User): wait_time = between(5, 5) weight = 1 host = "http://your-api-domain.com" @task def get_api_8(self): self.client.get("/v1/api_8")
关键实现说明
- 不要使用
time.sleep()做等待,Locust内置的wait_time是非阻塞实现,不会影响压测并发调度,between(15,15)代表固定等待15秒 - 通过
weight参数控制不同用户类的用户分配比例,本次设置FirstGroupUser权重为3,其余三个单接口用户类权重各为1,启动压测时设置总用户数为6,孵化率为6,即可完全匹配你的场景需求 - 所有HTTP请求统一使用
self.client.get发送,Locust会自动统计请求的成功率、响应时间等压测指标
场景示意图

内容的提问来源于stack exchange,提问作者Prabodha
相关产品推荐
相关产品推荐

