gpt4 book ai didi

locust - 当指定数量的用户任务完成时停止 Locust

转载 作者:行者123 更新时间:2023-12-04 00:59:23 25 4
gpt4 key购买 nike

在我的场景中,我在没有 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
引发 StopLocust()

在提供的场景中,您的每个任务都是一个 TaskSequence 类。为了在执行单个任务后退出 Locust,您需要向调用 StopLocust() 的整个类添加另一个步骤(函数)。我在下面提供了一个例子 -

class Scenario(TaskSequence):

@seq_task(1)
def task_1(self):
self.client.get("/going_somewhere")

@seq_task(2)
def task_2(self):
self.client.get("/going_somewhere_else")

@seq_task(3)
def done(self):
raise StopLocust()

默认情况下,Locust 设置为永不结束,并将不断从提供给它的可用任务集中挑选一个任务。提供 raise StopLocust() 将告诉当前用户 (Locust) 在到达当前任务结束时停止并不再选择任务。

关于locust - 当指定数量的用户任务完成时停止 Locust,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59832109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com