reqs/sec неверно при нагрузочном тестировании с помощью Python Locust

В моем тестировании для min_wait и max_wait установлено значение 1 секунда, а для пользователей установлено значение 100, поэтому я ожидаю, что количество запросов в секунду будет близко к 100.

Я знаю, что Саранче на самом деле нужно дождаться ответа сервера, а затем отправить следующий запрос. Даже несмотря на то, что если сервер отвечает быстро, например, 20 мс, результат TPS должен быть близок к 100, например, 92.

Но на самом деле их 10, как показано на следующем рисунке:

скриншот

Что мне не хватает?

Мой код ниже:

class UserBehavior(TaskSet):   

    @task(1)
    def list_teacher(self):
        self.client.get("/api/mgr/sq_mgr/?action=list_teacher&pagenum=1&pagesize=100")

    @task(1)
    def list_course(self):
        self.client.get("/api/mgr/sq_mgr/?action=list_course&pagenum=1&pagesize=20")


class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 1000
    max_wait = 1000

person Jcyrss    schedule 13.12.2018    source источник
comment
Это тот же вопрос, что и stackoverflow.com/q/53737188/10653038.   -  person user372895986472    schedule 13.12.2018
comment
Ответ в этом посте меня не убеждает. В моем тестировании вы могли обнаружить, что мой сервер очень быстро отвечает по статистике среднего времени отклика. Но все равно TPS намного ниже, чем я ожидал, даже не то что 100 TPS, должно быть вроде 90 TPS, почему 10 TPS?   -  person Jcyrss    schedule 14.12.2018
comment
Какова ваша скорость?   -  person Siyu    schedule 14.12.2018
comment
Кто знает @Jcyrss - причин может быть много. Большинство людей считают, что их сервис намного быстрее и масштабируемее, чем он есть на самом деле (почти каждый раз, когда я вижу вопросы по этому поводу как сопровождающий Locustio, сервис заканчивается проблемой).   -  person user372895986472    schedule 17.12.2018
comment
@Siyu, я пробовал со многими скоростями вывода от 10 до 100 в секунду, TPS не мог достичь почти 100 после довольно долгого времени.   -  person Jcyrss    schedule 28.03.2019


Ответы (1)


Я воспроизвел ваш сценарий с минимальной службой, которая отвечает после 10 мс сна и смогла достичь 98 запросов в секунду.

Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s
--------------------------------------------------------------------------------------------------------------------------------------------
 POST call1                                                      1754     0(0.00%)      20      13      34  |      20   47.90
 POST call2                                                      1826     0(0.00%)      20      13      30  |      20   50.10
--------------------------------------------------------------------------------------------------------------------------------------------
 Total                                                           3580     0(0.00%)                                      98.00

Так что с параметрами все в порядке.

Чем могут быть вызваны более низкие цифры:

  • Сам сервис отвечает медленно
  • Количество параллельных запросов ограничено. Возможно, у вас есть пул потоков размером 5 на критическом пути, который ограничит количество запросов в секунду.
  • Задержка в сети не учитывается. Locust будет инициировать ожидание только после завершения задачи, поэтому, если служба отвечает через 10 мс, но у вас есть время приема-передачи 90 мс, вы получаете 100 мс от начала до конца. Я ставлю на это, особенно если вы тестируете под нагрузкой какой-то сервер с вашей локальной машины.
  • Сама саранча может быть медленной. Это все-таки питон. Для меня это ограничение составляет ~ 550 об / с (я бы сказал, довольно низкое), потому что цикл событий ввода-вывода достигает 100% одного ядра.
person Imaskar    schedule 07.01.2020