【发布时间】:2020-05-06 23:36:04
【问题描述】:
在我的场景中,我在没有 Web UI 的情况下运行 Locust。我使用的命令是
locust -f my_locust_file --no_web -c 20 -r 4 # as a hack I add -t 10s
这相当于每秒孵化 4 个用户,总共孵化 20 个用户。
我的目标是让 20 个 locust 用户中的每一个执行一个任务,我希望 locust 运行在最后一个用户(第 20 个用户)的任务完成时完成并退出。收集的统计信息应仅包括与每个任务相关的响应时间。
在这个场景中,已经确定了 5 个可以与用户随机关联的任务(用户场景):
class UserScenarios(TaskSet):
tasks = [Sequence_One, ServerSequence, Components_Sequence, Embedded_Sequence, Connectivity_Sequence]
class MyLocust(HttpLocust):
def __init__(self):
super().__init__()
MyLocust.counter += 1
print(f"Counter = {MyLocust.counter}")
counter = 0
task_set = UserScenarios
wait_time = between(1, 1)
host = 'https://*****.com'
每个任务(用户场景)对应于应按顺序加载的 3 或 4 个页面的不同序列。由 2 页组成的经过清理和简化的序列示例是:
class Sequence_One(TaskSequence):
@seq_task(1)
def get_task1(self):
response = self.client.get(url='https://****',
name='https://****',
timeout=30,
allow_redirects=False,
headers={...})
@seq_task(2)
def get_task2(self):
response = self.client.get(url='https://****',
name='https://****',
timeout=30,
allow_redirects=False,
headers={...})
有没有办法在第 20 个(第 n 个)用户任务完成后停止测试?例如,如果每个任务访问 4 个页面,我希望在发出 20*4 = 80 个页面请求后终止测试。事实上,作为此测试的一部分,总共只应发出 80 个页面请求。
我对此测试的经验是,在最后一个用户任务完成后,页面请求会继续发出,直到我手动停止测试或使用比任务实际需要完成的时间长一点的时间限制。
【问题讨论】:
标签: locust