#python #load-testing #locust
#python #нагрузочное тестирование #locust
Вопрос:
Я хотел провести некоторое нагрузочное тестирование с помощью Locust, чтобы знать, как моя система реагирует на параллельные запросы.
Допустим, моя система получает 10 запросов одновременно. Моим первым рефлексом было измерить время ответа для каждого из этих 10 запросов. Я сделал простой locustfile.py
способ измерить это:
from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):
def on_start(self):
pass
def on_stop(self):
pass
@task(1)
def content_query(self):
self.client.get('/content')
class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait = 1000
max_wait = 1000
Я использовал этот файл и породил 10 locusts. Я смог получить желаемое измерение.
Но потом я понял, что я хочу знать, насколько быстро моя система ответила на ВСЕ эти 10 запросов. Если для получения ответа на каждый запрос требуется 20 мс, я не знаю, если:
- Все это заняло 20 мс, потому что каждый запрос обрабатывался параллельно
- Все это заняло 200 мс, потому что каждый запрос обрабатывался последовательно
Чтобы измерить это, у меня возникла следующая идея: я хочу, чтобы моя система постоянно загружалась 10 запросами в течение, скажем, 1 часа, и измеряла, сколько запросов было обработано за это время.
Другими словами, как только один из 10 запросов выполняется успешно, другой запрос должен быть выполнен, чтобы занять его место.
Как я могу сделать это с Locust?
У меня была идея использовать обработчик успешного выполнения запроса, как описано в документации Locust:
from locust import HttpLocust, TaskSet, task, events
def my_success_handler(request_type, name, response_time, response_lenght, **kw):
print("Success")
events.request_success = my_success_handler
Это позволило бы мне узнать, когда один запрос выполнен успешно, но что потом? Я не уверен, возможно ли сообщить конкретному locust о том, что его запрос был успешным.