要模拟蝗虫中特定的迭代次数,我使用以下简单代码流:
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发出的正常终止调用。
我想知道的是,如何优雅地手动终止蝗虫-主奴隶。
答案 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
您应该不在您的用户任务中(在您的代码中)创建一个新的运行器 。有点太疯狂了:)