在 Locust 负载测试环境中,任务被定义并随机调用。 但是,如果我希望在特定任务之后执行任务。那我该怎么办呢? 例如:在每次“X”url 调用之后,我希望根据“X”的响应调用“Y”url。
根据我的经验,我发现最好将 Locust 任务建模为完全相互独立,并且每个任务都涵盖用户场景或行为(例如,客户登录、搜索一本书并将其添加到购物车)。这主要是因为这是对用户行为的更接近的模拟。
您是否尝试过仅对同一任务提出多个请求,并且仅根据您的响应进行 if / else 处理? Carl Byström 演讲中的这张幻灯片遵循上述方法。
您只需进行连续的获取或发布即可。当您定义任务时,请执行以下操作:
@task(10)
def my_task(l):
l.client.get('/X')
l.client.get('/Y')
有一个选项可以创建从
TaskSequence
类继承的自定义任务集。
然后您应该将
seq_task
装饰器添加到所有任务集方法中以顺序运行其任务。
https://docs.locust.io/en/latest/writing-a-locustfile.html#tasksequence-class
截至 2024 年,您可以使用
TaskSeq
- 说我想运行 task1
10 次,然后运行 task2
10 次
from locust import HttpUser, TaskSequence, seq_task
class MyTaskSequence(TaskSequence):
@seq_task(1)
def task1(self):
for _ in range(10):
self.client.get("/path1")
print("Executing task1")
@seq_task(2)
def task2(self):
for _ in range(10):
self.client.get("/path2")
print("Executing task2")
class WebsiteUser(HttpUser):
tasks = [MyTaskSequence]
wait_time = lambda _: 1