Задать вопрос
Ответы пользователя по тегу Нагрузочное тестирование
  • JMeter настройка Thread Group, что означает Rump-Up period?

    @polarnik
    Тестировщик
    Как можно использовать эти параметры.

    Пусть нужна интенсивность выполнения сценария "Аутентификация, Создание и скачивание документа" равная 8 в сек. И чтобы тест выполнялся в таком режиме 30 минут или 1800 сек.

    То есть, нужно, чтобы за 1 секунду запускалось выполнение 8 потоков (virtual user / thread).
    Значит за 10 000 секунд должно запуститься 80 000 потоков.
    Это если каждый поток будет делать одну итерацию теста.

    Задаём настройки:
    • Users - 80 000
    • Rump-Up - 10 000
    • Loop Count - 1
    • Duration - 1800
    • Startup Delay - 0


    Если же, допустимо, чтобы один пользователь в цикле дважды выполнял вход, создание и скачивание документа, то настройки можно изменить - пользователей теперь нужно в 2 раза меньше, для требуемой интенсивности работы:
    • Users - 40 000
    • Rump-Up - 10 000
    • Loop Count - 2
    • Duration - 1800
    • Startup Delay - 0


    А если допустимо, чтобы в цикле выполнялось по 8 сценариев, то можно сделать так:
    • Users - 10 000
    • Rump-Up - 10 000
    • Loop Count - 8
    • Duration - 1800
    • Startup Delay - 0


    Из-за кратности Users и Rump-Up, это уже эквивалентно:
    • Users - 4000
    • Rump-Up - 4000
    • Loop Count - 8
    • Duration - 1800
    • Startup Delay - 0
    Ответ написан
    Комментировать
  • Как рассчитать ресурсы необходимые для стенда нагрузочного тестирования?

    @polarnik
    Тестировщик
    Подбором.
    И касательно облаков - с ними не всё так просто.
    Например, пусть в облаке на выбранном тарифе есть квота на длительность высокой доступности диска. И в первый час работы диск работает быстро, а во второй час и последующие - работает вдруг медленно.

    Единственное в чем можно быть уверенным, так это в оперативной памяти. Она в облаке не плавает.
    А рассчитать необходимое количество ОЗУ надо от количества потоков, которые будут выполняться во время теста.
    Нужно провести пробные тесты, замониторить, сколько оперативной памяти необходимо для выбранного профиля нагрузки. Метод оценки такой - если приложение не упало в java.lang.OutOfMemoryError: Java heap space и время отклика в JMeter и по логам сервера пости совпадают (JMeter не тормозит), то памяти ему достаточно.

    А если будет что-то такое:
    $ ./run.sh ./script.01.Thread_Group.jmx --nongui
    Creating summariser <summary>
    Created the tree successfully using ./script.01.Thread_Group.jmx
    Starting the test @ Mon Oct 01 17:21:27 MSK 2018 (1538403687382)
    Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
    summary +     19 in 00:00:02 =    7.7/s Avg:     0 Min:     0 Max:     2 Err:     0 (0.00%) Active: 1 Started: 10 Finished: 9
    summary +    256 in 00:00:30 =    8.6/s Avg:     0 Min:     0 Max:    12 Err:     0 (0.00%) Active: 2 Started: 139 Finished: 137
    summary =    275 in 00:00:32 =    8.5/s Avg:     0 Min:     0 Max:    12 Err:     0 (0.00%)
    summary +    498 in 00:00:30 =   16.6/s Avg:     0 Min:     0 Max:     2 Err:     0 (0.00%) Active: 3 Started: 389 Finished: 386
    summary =    773 in 00:01:02 =   12.4/s Avg:     0 Min:     0 Max:    12 Err:     0 (0.00%)
    summary +    738 in 00:00:30 =   24.6/s Avg:     0 Min:     0 Max:    19 Err:     0 (0.00%) Active: 2 Started: 757 Finished: 755
    summary =   1511 in 00:01:32 =   16.4/s Avg:     0 Min:     0 Max:    19 Err:     0 (0.00%)
    summary +    976 in 00:00:30 =   32.6/s Avg:     0 Min:     0 Max:    17 Err:     0 (0.00%) Active: 2 Started: 1245 Finished: 1243
    summary =   2487 in 00:02:02 =   20.3/s Avg:     0 Min:     0 Max:    19 Err:     0 (0.00%)
    summary +   1214 in 00:00:30 =   40.4/s Avg:     0 Min:     0 Max:     1 Err:     0 (0.00%) Active: 4 Started: 1854 Finished: 1850
    summary =   3701 in 00:02:32 =   24.3/s Avg:     0 Min:     0 Max:    19 Err:     0 (0.00%)
    summary +   1454 in 00:00:30 =   48.5/s Avg:     0 Min:     0 Max:     2 Err:     0 (0.00%) Active: 3 Started: 2580 Finished: 2577
    summary =   5155 in 00:03:02 =   28.3/s Avg:     0 Min:     0 Max:    19 Err:     0 (0.00%)
    summary +   1684 in 00:00:30 =   56.1/s Avg:     0 Min:     0 Max:     2 Err:     0 (0.00%) Active: 8 Started: 3427 Finished: 3419
    summary =   6839 in 00:03:32 =   32.2/s Avg:     0 Min:     0 Max:    19 Err:     0 (0.00%)
    summary +    488 in 00:00:30 =   16.1/s Avg:     2 Min:     0 Max:   361 Err:     0 (0.00%) Active: 155 Started: 3818 Finished: 3663
    summary =   7327 in 00:04:03 =   30.2/s Avg:     0 Min:     0 Max:   361 Err:     0 (0.00%)
    java.lang.OutOfMemoryError: Java heap space
    Dumping heap to java_pid21386.hprof ...
    Heap dump file created [2723488978 bytes in 41,828 secs]
    Killed


    То видно, что приложение жило до отметки Active: 155. Возможно, при 200-ти потоках JMeter тоже будут чувствовать себя хорошо. И тут надо подобрать.
    Если настраиваете профиль через шаг нагрузки, как в HP LoadRunner, используя Constant Throughput Timer или Precise Throughput Timer, то можно как поступить:

    1. Рассчитать полный профиль и все параметры для достижения нужной интенсивности, например, по руководству https://loadtestweb.wordpress.com/2017/08/23/pacing/ - пусть получилось 600 потоков нужно
    2. Опытным путём определить, что станция с 4 ГБайт памяти под Heap Apache.JMeter вытягивает 200 потоков.
    3. Рассчитываем количество станций, как 600 / 200 = 3
    Ответ написан
    Комментировать
  • Как правильно агрегировать несколько генераторов jmeter в одном графике из influx?

    @polarnik
    Тестировщик
    Есть такая возможность:

    https://jmeter.apache.org/usermanual/component_ref...

    TAG_WhatEverYouWant
    You can add as many custom tags as you want. For each of them, just create a new line and prefix its name by "TAG_"


    Если в настройках Backend Listener добавить такой TAG_controllerName, и в значении указать, например, __machineName https://jmeter.apache.org/usermanual/functions.htm...
    то получится вполне себе ключ для группировки значений
    Ответ написан
    Комментировать
  • Импортировать лог jmeter в influxdb?

    @polarnik
    Тестировщик
    Используйте загрузку данных из csv, и загружайте csv/jtl-файks с помощью встроенной возможности telegraf:
    csv - https://github.com/influxdata/telegraf/tree/master...

    Решение простое. Если два Вас плюс, то, что будут вообще все запросы в Influxdb храниться, то хорошо.
    А на 10-й 20-й запуск данных в Influx станет много, запросы будут выполняться медленнее.
    Я пока лью сырые данные, как для JMeter так и для Gatling. Агрегировать только-только начал, для RPS - агрегирую по секундам. Использую для Gatling awk-скрипт.

    Для JMeter аггрегацию пока не использую.
    Думаю использовать встроенную :
    basicstats - https://github.com/influxdata/telegraf/tree/master...
    valuecounter - https://github.com/influxdata/telegraf/tree/master...
    histogram - https://github.com/influxdata/telegraf/tree/master...
    Ответ написан
    Комментировать
  • Можно ли подписать документ с помощью Jmeter?

    @polarnik
    Тестировщик
    ... а недавно сделали другой вариант:
    * подписание сделано на C# в виде библиотеки (КриптоПро и прочая крипрография работает в C# с использованием 20-30 строк кода всего)
    * а .net-библиотеку обернули в java-библиотеку с помощью jni4net уже без написания кода вообще

    Таким образом - 20-30 строк кода, немного терпения и готово. .NET работает хорошо, быстро, но работает только в Windows. В итоге 20 подписаний в сек на одной нагрузочной станции тест держит - это синтетический замер. А по профилю нагрузки нам достаточно иметь 1 подписание в секунду.

    Пример подписания на C# - 5 строк кода:
    * https://github.com/polarnik/Tools.CMSCreator/blob/...
    остальное обвязка.
    Ответ написан
    Комментировать
  • Как отправить с помощью JMetr POST запрос на URL, с данными из файла (файлов)?

    @polarnik
    Тестировщик
    Доброго дня.

    Про загрузку тела запроса из файла
    В компоненте HTTP Request есть особое поведение для поля File Path:, как раз для отправки полного тела запроса из файла:

    Name of the file to send. If left blank, JMeter does not send a file, if filled in, JMeter automatically sends the request as a multipart form request.

    If it is a POST or PUT or PATCH request and there is a single file whose 'Parameter name' attribute (below) is omitted, then the file is sent as the entire body of the request, i.e. no wrappers are added. This allows arbitrary bodies to be sent. This functionality is present for POST requests, and also for PUT requests. See below for some further information on parameter handling.


    Эту возможность особенно удобно использовать при отправке больших запросов с минимальным количеством оперативной памяти. Иначе бы пришлось хранить большое тело запроса в тесте, и загружать большие запросы в виде строк в память JMeter, а память всегда ценный ресурс.

    Про загрузку набора файлов в качестве тел запросов
    Рекомендую сделать так:
    * использовать Directory Listing Config из JMeter Plugins, помещая им названия файлов в переменную
    * а переменную указать в поле File Path компонента HTTP Request

    Если использовать только стандартные средства, то можно сделать так:
    * командой dir /B или ls -l или find * сформировать список имён файлов в виде файла, пусть его имя будет files.csv
    * используя CSV Data Set Config загружать имена файлов в переменную
    * а переменную указать в поле File Path компонента HTTP Request

    Про возможность управления частотой отправки
    Тут разные подходы.
    Самый простой такой - просто использовать Thread Group с параметрами:
    * Action to be taken after a Sampler error: Start Next Thread Loop
    * Number of Threads: 80000
    * Ramp-up Period: 10000
    * Loop Count: 1
    * Delay Thread creation until needed: [v]
    * Scheduler: [v]
    * Duration (seconds): 300
    * Startup delay (seconds): 0

    что получится - JMeter будет знать, что за 10 000 секунд надо выполнить 80 000 запусков, то есть будет работать с частотой 8 запусков в сек. Всё частота контроллируется. Космического значения 80 000 thread-ов не пугайтесь, ведь стоит галочка Delay Thread creation until needed: [v].
    А тест будет выполняться с такой частотой 300 сек или 5 минут (не 10 000 сек).

    Есть вариант контроля нагрузки, через расчет количества потоков и пауз между выполнениями операций в них.
    Классический вариант - использовать
    * Ultimate Thread Group
    * Test Action (сейчас называется Flow Control Action)
    * Constant Throughput Timer
    Инструкцию написал про такую связку:
    * https://loadtestweb.wordpress.com/2017/08/23/pacing/

    В качестве альтернативы можно использовать вариант с точным выполнением заданного количества запросов за интервал времени:
    * используя Precise Throughput Timer вместо Constant Throughput Timer

    Или четвертый, с использованием дополнительных плагинов:
    * Concurrency Thread Group
    * Throughput Shaping Timer
    * Schedule Feedback Function

    (но я так ещё не пробовал)

    Резюме
    Таким образом можно решить все задачи:
    • Отправить запрос с телом из указанного файла
    • Файлы брать из указанного каталога
    • Контролировать интенсивность отправки
    Ответ написан
    Комментировать