如何在蝗虫中显式触发MasterLocustRunner.quit()

时间:2019-12-23 14:00:24

标签: 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&options(我在locust命令中指定)

如果我取消注释“ runners.locust_runner.quit()”并注释“ locrunner.quit()”,则测试将继续等待,直到运行时结束后,Master发出的正常终止调用。

我想知道的是,如何优雅地手动终止蝗虫-主奴隶。

1 个答案:

答案 0 :(得分:0)

在蝗虫1.1中已大大改进。现在,您可以从用户调用self.environment.runner.quit()(或从TaskSet调用self.user.environment.runner.quit()

您也可以从完全独立的greenlet(也许不完全是您想要的,但我想我会提到它)中调用它,例如此处https://docs.locust.io/en/stable/extending-locust.html#run-a-background-greenlet

您应该在您的用户任务中(在您的代码中)创建一个新的运行器 。有点太疯狂了:)