Чтобы смоделировать определенное количество итераций в саранче, я использую простой поток кода, как показано ниже:
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 ()», тест продолжит ждать, пока не будет получен изящный завершающий вызов от Мастера, отправленный после завершения времени выполнения.
Что я хотел бы знать, так это то, как вручную / завершить изящное прекращение саранчи - Мастер и Раб.