Постоянное количество параллельных запросов с Locust - PullRequest
0 голосов
/ 29 марта 2019

Я хотел провести нагрузочное тестирование с помощью 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

Это позволило бымне знать, когда один запрос успешен, но что тогда?Я не уверен, возможно ли сообщить конкретной саранче, что ее запрос был успешным.

...