Тестирование с помощью JMeter: как запускать N запросов в секунду

Мне нужно проверить, может ли наша система выполнять N запросов в секунду. Технически это 2 запроса к одному API, 2 запроса к другому и 6 запросов к третьему. Но главное, что они должны происходить одновременно - так 10 запросов в секунду. Итак, в JMeter я создал три группы потоков, первая определяет количество потоков 1 и время нарастания 0. Вторая группа потоков такая же, а третья группа потоков определяет количество потоков 6 и время нарастания 0. Но это на самом деле не гарантирует, что он будет запускать их в секунду Как мне это подражать? И как мне увидеть результат - удалось ли это выполнить или нет?

Спасибо!


person alexeypro    schedule 16.02.2011    source источник
comment
Это связано с: stackoverflow.com/questions/4232700/, в котором используется то же решение, о котором упоминалось @lb_lb.   -  person MaddHacker    schedule 30.05.2012
comment
Часто возникает заблуждение, когда пытаются достичь целевого процента запросов на создание экземпляров Vusers в той же пропорции. Это работает, только если среднее время ответа (ART) для каждого типа запроса одинаково. Очень маловероятно, что, например, поисковый запрос ART будет иметь такое же RT, что и запрос на регистрацию. Как следствие, после выполнения теста в течение определенного периода времени фактическая доля запросов (каждого типа) будет отличаться от целевой доли запросов.   -  person CarlosG    schedule 13.05.2021


Ответы (6)


Как и при любом сетевом тесте, всегда будут проблемы, особенно с задержкой - даже если вы можете отправлять ровно 6 в секунду, они будут отправляться последовательно (именно так и отправляются пакеты). и не все могут быть выполнены за эту секунду, плюс время обработки.

Обычно, когда метрики производительности имеют конкретное значение x в секунду, они измеряются за определенный период времени. У вашего API может даже быть буфер - так что технически вы можете отправлять 6 в секунду, но обрабатывать 5 в секунду, с буфером 20, что означает, что его хватит на 20 секунд трафика, так как вы бы отправили 120, что для обработки потребуется 120/5 = 24 секунды. Но любое большее, чем это, приведет к переполнению буфера. Так что просто отправить ровно 6 в секунду для тестирования недостаточно.

В группе потоков вы правы, устанавливая количество потоков (пользователей) равным 6. Затем запустите его в цикле навсегда (отметьте его или поместите в цикл while) и добавьте слушателя, например, сводный отчет и дерево результатов. Результаты, которые вы можете использовать для проверки того, что нужные данные отправляются и на которые были даны ответы (при условии, что вы проверяете ответы), и в сводном отчете вы можете увидеть, сколько каждого действия происходит в час (очевидно, умножьте на 3600 для секунд, но из-за этой неточности лучше всего запустить его в течение длительного времени).

Теперь можно запустить начальный нагрузочный тест, а в качестве более точного теста вы можете оставить его работать на более длительное время (тест выдержки), чтобы увидеть, не появятся ли какие-либо другие проблемы - переполнение буфера, утечка памяти или другие неожиданные события.

person Mark Mayo    schedule 17.02.2011

Вы можете использовать ConstantThroughputTimer.

Цитата из файлов справки JMeter ниже:

18.6.4 Таймер постоянной пропускной способности Этот таймер вводит переменные паузы, рассчитанные для поддержания общей пропускной способности (в единицах отсчетов в минуту) как можно ближе к заданному значению. Конечно, пропускная способность будет ниже, если сервер не сможет ее обработать, или если другие таймеры или трудоемкие элементы тестирования предотвратят это. N.B. хотя таймер называется таймером постоянной пропускной способности, значение пропускной способности не обязательно должно быть постоянным. Его можно определить в терминах вызова переменной или функции, а значение можно изменить во время теста.

Например, я использовал его для генерации 40 запросов в секунду:

 <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="Constant Throughput Timer" enabled="true">
      <stringProp name="calcMode">all active threads in current thread group</stringProp>
      <doubleProp>
        <name>throughput</name>
        <value>2400.0</value>
        <savedValue>0.0</savedValue>
      </doubleProp>
    </ConstantThroughputTimer>

И это резюме:

Created the tree successfully using performance/search-performance.jmx
Starting the test @ Tue Mar 15 16:28:39 CET 2011 (1300202919244)
Waiting for possible shutdown message on port 4445
Generate Summary Results +  3247 in  80,3s =   40,4/s Avg:    18 Min:     0 Max:  1328 Err:   108 (3,33%)
Generate Summary Results +  7199 in 180,0s =   40,0/s Avg:    15 Min:     1 Max:  2071 Err:   378 (5,25%)
Generate Summary Results = 10446 in 260,3s =   40,1/s Avg:    16 Min:     0 Max:  2071 Err:   486 (4,65%)
Generate Summary Results +  7200 in 180,0s =   40,0/s Avg:    14 Min:     0 Max:   152 Err:   399 (5,54%)
Generate Summary Results = 17646 in 440,4s =   40,1/s Avg:    15 Min:     0 Max:  2071 Err:   885 (5,02%)
Generate Summary Results +  7199 in 180,0s =   40,0/s Avg:    14 Min:     0 Max:  1797 Err:   436 (6,06%)
Generate Summary Results = 24845 in 620,4s =   40,0/s Avg:    15 Min:     0 Max:  2071 Err:  1321 (5,32%)

Но я провожу этот тест в своей сети.

person lb_lb    schedule 15.03.2011
comment
Не уверен, почему это не принятый ответ. Имеет больше голосов и отлично работает на меня. - person fogwolf; 15.11.2016

Используйте таймер формирования пропускной способности

person Andrey Pokhilko    schedule 26.04.2011

У меня была аналогичная проблема, и я нашел два решения:

Решение 1.
Вы можете использовать Stepping Thread Group (позволяет устанавливать этапы увеличения количества потоков в течение заданных периодов времени) с таймером постоянной пропускной способности в ней. Таймер пропускной способности позволяет вам установить количество выборок, которые поток может отправлять в минуту (например, если вы установите его на 1, поток будет отправлять только один запрос в минуту). Кроме того, вы можете применить таймер пропускной способности ко всем потокам в вашей группе потоков или установить таймер для каждого потока со своими настройками. Подробнее о таймере пропускной способности можно узнать здесь: https://www.blazemeter.com/blog/how-use-jmeters-throughput-constant-timer.

Решение 2.
Используйте «Настроить группу потоков». Вы можете рассчитать количество потоков и время нарастания, чтобы получить желаемое количество потоков в секунду.

person Yury Ustsinchyk    schedule 25.02.2016

Вы можете использовать функцию обратной связи по расписанию, и вам также понадобится Группа потоков с параллелизмом

person raman rayat    schedule 23.11.2018

То же самое можно сделать, настроив ConstantThroughputTimer, как было предложено выше, из пользовательского интерфейса, также добавив таймер постоянной пропускной способности, щелкнув правой кнопкой мыши группу потоков, а затем щелкнув таймер и затем выбрав таймер постоянной пропускной способности.

person Adbhut Rai    schedule 02.02.2021