Я использую Locust для отправки сообщений в очередь RabbitMQ. Я легко могу это сделать, используя образец RabbitMQ из locust.io-demo репозиторий, но теперь мне нужно заставить одну задачу ждать 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 секунд, так как это то, что значение для минимального и максимального времени ожидания. Затем я запустил Locust с 1 пользователем и коэффициентом вылупления 1.
Я увидел, что новый запрос генерируется каждые 10 секунд в пользовательском интерфейсе Locust.
Затем я попробовал это:
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. Как ни странно, я увидел те же результаты - 1 новый запрос каждые 10 секунд. Черт возьми, я даже пробовал использовать gevent.time
вместо time.time
, но все равно получил те же результаты.
Как я могу заставить мою задачу публикации ждать 30 секунд между каждым выполнением? Есть ли свойство, которое мне не хватает?