Я хотел провести нагрузочное тестирование с помощью 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 саранчовых.Я смог получить требуемое измерение.
Но затем я понял, что хочу знать, как быстро моя система ответила на ВСЕ из этих 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
Это позволило бымне знать, когда один запрос успешен, но что тогда?Я не уверен, возможно ли сообщить конкретной саранче, что ее запрос был успешным.