【发布时间】:2019-09-20 10:03:55
【问题描述】:
我正在使用 Locust 将消息推送到 RabbitMQ 队列中。我可以使用 locust.io-demo 存储库中的 RabbitMQ 示例轻松完成此操作,但现在我需要强制单个任务在每次调用之间等待 1 分钟。
在我的测试中,我需要每分钟将 100 条消息推送到队列中,因为该系统将以一分钟的增量“突发”接收消息。我已经尝试实现这一点,但没有成功。这是我尝试的第一件事:
from rabbitmq import get_client
import time
from locust import Locust, TaskSet, task, events
class RabbitTaskSet(TaskSet):
@task
def publish(self):
get_client().publish()
class MyLocust(Locust):
task_set = RabbitTaskSet
min_wait = 30000
max_wait = 30000
def on_locust_stop_hatching():
get_client().disconnect()
events.locust_stop_hatching += on_locust_stop_hatching
我假设publish 方法将每 30 秒执行一次,因为这是最小和最大等待时间的值。然后我用 1 个用户和 1 的孵化率启动了 Locust。
我看到的是在 Locust UI 中每 10 秒生成一个新请求。
然后我尝试了这个:
class RabbitTaskSet(TaskSet):
@task
def publish(self):
get_client().publish()
time.sleep(30)
class MyLocust(Locust):
task_set = RabbitTaskSet
# min_wait = 30000
# max_wait = 30000
然后我再次启动 Locust,有 1 个用户,孵化率为 1。奇怪的是,我看到了相同的结果 - 每 10 秒有 1 个新请求。哎呀,我什至尝试使用gevent.time 而不是time.time,但我仍然得到了相同的结果。
如何让我的发布任务在每次执行之间等待 30 秒?有没有我遗漏的财产?
【问题讨论】:
-
感谢大黄蜂的快速响应,但我不想停止整个测试。我希望我的任务集在执行前等待 30 秒。我希望所有用户同时运行任务集,然后等待 30 秒再运行。