Подтвердить что ты не робот

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

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

Спасибо!

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Например, я использовал его для генерации 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%)

Но я запускаю этот тест внутри своей сети.

Ответ 4

У меня была схожая проблема, и вот два найденных решения:

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

Решение 2:
Используйте "SetUp Thread Group". Вы можете рассчитать количество потоков и время нарастания, чтобы получить требуемые потоки в секунду.