Заставьте саранчу ждать между запусками задач

Я использую 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 секунд между каждым выполнением? Есть ли свойство, которое мне не хватает?


person Tom Purl    schedule 01.05.2019    source источник
comment
Проверьте это stackoverflow.com/questions/25392451/   -  person bumblebee    schedule 02.05.2019
comment
Спасибо за быстрый отклик, шмель, но я не хочу останавливать весь тест. Я хочу, чтобы мой набор задач ждал 30 секунд перед выполнением. Я хочу, чтобы все пользователи запускали поставленную задачу одновременно, а затем ждали 30 секунд перед повторным запуском.   -  person Tom Purl    schedule 02.05.2019
comment
Взгляните на этот github.com/locustio/locust/issues/59#issuecomment -41624517   -  person bumblebee    schedule 02.05.2019


Ответы (1)


используйте этот код

from rabbitmq import get_client
import time

from locust import Locust, TaskSet, task, events,between

class RabbitTaskSet(TaskSet):
    @task
    def publish(self):
        get_client().publish()

class MyLocust(Locust):
    task_set = RabbitTaskSet
    wait_time = between(5000, 10000)


def on_locust_stop_hatching():
    get_client().disconnect()
person Loopero    schedule 28.10.2020