Как явно вызвать MasterLocustRunner.quit () в locust

Чтобы смоделировать определенное количество итераций в саранче, я использую простой поток кода, как показано ниже:

class NcsoTest(TaskSet):

REQ_HEADER = {
    "Accept": "application/json",
    "Accept-Encoding": "gzip, deflate",
    "Connection": "keep-alive",
    "Content-Length": "860",
    "Content-Type": "application/json",
    "User-Agent": "python-requests/2.21.0",
 }

@seq_task(1)
def user_workflow(self):

    locrunner = MasterLocustRunner()
    for i in range(1, 100, 1):
        self.send_post_request()
        self.send_get_request()
    Singleton.logger().info("Test Number reached. Stopping Locust.")
    #runners.locust_runner.quit()
    locrunner.quit()

def send_post_request(self):
    response = self.client.post("/api/v2/services", data=Singleton.json_body, headers=NcsoTest.REQ_HEADER)
    print response


def send_get_request(self):
    response = self.client.get("/api/v2/services", headers=NcsoTest.REQ_HEADER)
    print response

class NcsoLoad(HttpLocust):

    max_wait = 300
    min_wait = 300
    sleep_time = 10

    task_set = NcsoTest

Чтобы запустить этот тест, я использую команду со следующими параметрами:

--host https://10.123.123.123 --min_wait_time 300 --max_wait_time 300 --num_clients 1 --hatch_rate 1 --test_time 5m

Хотя я могу выполнить 100 запросов, если эти 100 запросов заканчиваются до 5 минут, бегун саранчи продолжает выдавать ошибку, заявляя, что MasterLocustRunner нуждается в дополнительных параметрах, которые являются locust_class и опциями (которые я указал в команде locust)

Если я откажусь от комментария «runners.locust_runner.quit ()» и прокомментирую «locrunner.quit ()», тест продолжит ждать, пока не будет получен изящный завершающий вызов от Мастера, отправленный после завершения времени выполнения.

Что я хотел бы знать, так это то, как вручную / завершить изящное прекращение саранчи - Мастер и Раб.


person Avataar17    schedule 23.12.2019    source источник


Ответы (1)


Это было значительно улучшено в locust 1.1. Теперь вы можете вызывать self.environment.runner.quit() от пользователя (или self.user.environment.runner.quit() из набора задач)

Вы также можете вызвать его из совершенно отдельного гринлета (возможно, не совсем то, что вы ищете, но я подумал, что упомянул бы об этом), например, здесь https://docs.locust.io/en/stable/exnding-locust.html#run-a-background-greenlet < / а>

Вам не следует создавать новый Runner внутри ваших пользовательских задач (что делает ваш код). Это слишком дико :)

person Cyberwiz    schedule 28.06.2020
comment
Я позвонил self.environment.runner.quit(), в нем указано [2021-05-14 12:23:13,986] Karls-MacBook-Pro.local/INFO/locust.runners: Stopping 3 users, но тест просто продолжается в автономном режиме (задачи не выполняются, они остановлены, но отчет продолжает появляться каждые несколько секунд). Мне нужно нажать ctrl + c, чтобы выйти из теста. Я должен позвонить quit()? - person basickarl; 14.05.2021