jMeter

10 шагов для запуска тестирования производительности с Apache JMeter (смотреть).

  1. Установить JAVA (скачать), проверить: java -version
  2. Установить jMeter (скачать)
  3. Установить plugins-manager.jar (скачать), добавить плагины:
    • Custom Thread Groups
    • Flexible File Writer
    • PerfMon Servers Performance
    • Custom JMeter Functions
    • 3 Basic Graphs
    • 5 Additional Graphs
    • JSON Plugins
    • Throughput Shaping Timer (ограничения)
    • Dummy Sampler (в учебных целях)
    • Distribution/Percentile Graphs
    • BlazeMeter step-by-step Debugger
    • KPI vs KPI graphs
    • 5 Additional Graphs
    • WebSocket Sampler by Maciej Zaleski
    • WebSocket Samplers by Peter Doornbosch

Функция Random

  • ${__Random(300,180000)}
  • ${__RandomString(${__Random(3,30)},ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz0123456789,)}
  • ${__RandomString(5,abcdefghijk12345,myRandom)}

скачать шаблон


Конфигуратор данных

  • создать переменную: Add - Config Element - Random Variable
    (name = nick, format = user-000, minValue = 001, maxValue = 999)
  • в запросе указать ссылку на переменную = ${nick}

скачать шаблон


Файл .csv

  • создать переменную: Add - Config Element - CSV Data Set Config
    (filename = pathToCsv, name = nick)
  • в запросе указать ссылку на переменную = ${nick}

скачать шаблон

Single (одиночка)

  • добавить группу: Add - Tread Group
  • добавить запрос: Add - HTTP Request
  • добавить отчеты: Add - Listener - View Result Tree, Summary Report, Aggregate Report
  • добавить ожидание: Add - Timer - Uniform Random Timer

скачать шаблон


access.log (для GET запросов)

  • создать файл access.log
  • добавить список URL адресов
  • привести адреса к формату "GET /index.html
  • указать путь к файлу в jMeter: Add - Sampler - Access Log Sampler
  • добавить ожидание: Add - Timer - Uniform Random Timer

скачать шаблон


Recoder devTools (для api)

  • открыть Chrome - devTools - network
  • выполнить пользовательский сценарий
  • правый клик мышки - выбрать "Save all as HAR with content"
  • конвертировать файл в .jmx (конвертер)
  • открыть файл в jMeter
  • добавить ожидание: Add - Timer - Uniform Random Timer

Recoder BlazeMeter

  • установить BlazeMeter Chrome Extension (скачать)
  • залогиниться в программу
  • записать пользовательский сценарий
  • сохранить сценарий в .jmx
  • открыть файл в jMeter
  • добавить ожидание: Add - Timer - Uniform Random Timer

Непрерывно возрастающая нагрузка (поиск точки насыщения / определение максимальной производительности)

Поиск точки насыщения
  • добавить группу: Add - Threads - Thread Group
    (number of threads = 100, ramp-up period = 100, loop count = infinite, duration = 101)
  • добавить запрос: Add - HTTP Request
  • добавить отчет: Add - Listener - Summary Report
    (filename = result.jmx / result.csv)
  • добавить ожидание: Add - Timer - Constant Throughput Timer
    (target throughput = 60, calculate = this thread only)

скачать шаблон


Постоянная нагрузка (подтверждение максимальной производительности)

Подтверждение максимальной производительности
  • добавить группу: Add - Threads - Thread Group
    (number of threads = 80% от максимума, ramp-up period = 80% от максимума, loop count = infinite, duration = 600)
  • добавить запрос: Add - HTTP Request
  • добавить отчет: Add - Listener - Summary Report
    (filename = result.jmx / result.csv)
  • добавить ожидание: Add - Timer - Constant Throughput Timer
    (target throughput = 60, calculate = this thread only)

скачать шаблон


Постоянная длительная нагрузка (проверка надежности)

Проверка надежности
  • добавить группу: Add - Threads - Thread Group
    (number of threads = 80% от максимума, ramp-up period = 80% от максимума, loop count = infinite, duration = 3600 час / 28800 8-часов / 86400 сутки / 259200 3-суток / 432000 5-суток)
  • добавить запрос: Add - HTTP Request
  • добавить отчет: Add - Listener - Summary Report
    (filename = result.jmx / result.csv)
  • добавить ожидание: Add - Timer - Constant Throughput Timer
    (target throughput = 60, calculate = this thread only)

скачать шаблон


Нагрузка всплесками (проверка отказоустойчивости)

Проверка отказоустойчивости
  • добавить в тест-план отчеты:
    • Add - Listener - Summary Report (filename = result.jmx / result.csv)
    • Add - Listener - Active Threads Over Time
  • создать первую группу:
    • Add - Threads - Thread Group (number of threads = 80% от максимума, ramp-up period = 5, loop count = infinite, duration = 300)
    • добавить запрос: Add - HTTP Request
    • добавить ожидание: Add - Timer - Constant Throughput Timer (target throughput = 60, calculate = this thread only)
  • создать вторую группу:
    • Add - Threads - Thread Group (number of threads = 150% от максимума, ramp-up period = 3, loop count = infinite, duration = 300)
    • добавить запрос: Add - HTTP Request
    • добавить ожидание: Add - Timer - Constant Throughput Timer (target throughput = 60, calculate = this thread only)
    • добавить ожидание: Add - Timer - Constant Timer (thread delay = 30000)

скачать шаблон

Интерфейс jMeter

  • Run - Clear All
  • Run - Start

Командная строка

  • run cmd for Windows OS
  • cd (path to jmeter\bin)
  • jmeter -n -t pathToScenarioFile.jmx -l pathToResultFile.csv (pathToResultFile.jtl)

Сводная таблица

отчет.xlsx


Интерфейс jMeter

  • добавить отчеты: Add - Listener - someReport
    (filename = result.jmx / result.csv)
  • Summary Report
  • jp@gc - Active Threads Over Time
  • Graph Results
  • jp@gc - Response Times Distribution
  • jp@gc - Response Times Percentiles

скачать шаблон


HTML отчет (командная строка)

  • run cmd for Windows OS
  • cd (path to jmeter\bin)
  • jmeter -g pathToResultFile.csv -o pathToHtmlResultFolder
    jmeter -g pathToResultFile.jtl -o pathToHtmlResultFolder

Интерфейс Grafana

  1. Установить Grafana (инструкция)
  2. Установить InfluxDB (инструкция)
    • скачать и разархивировать в папку C:\Program Files\InfluxData\influxdb
    • открыть cmd, выполнить "C:\Program Files\InfluxData\influxdb">influxd.exe
    • перейти http://localhost:8086, login=admin, password=12345678
  3. Установить Telegraf (инструкция)
    • скачать и разархивировать в папку C:\Program Files\Telegraf
    • создать Bucket в InfluxDB
    • сгенерировать API Token к созданному Bucket (write)
    • создать TelegrafOutputConfiguration к созданному Bucket
    • заменить раздел outputs.influxdb_v2 в influxdb.conf на созданную конфигурацию + изменить значение token="$INFLUX_TOKEN" на сгенерированный API Token
    • запустить Telegraf через cmd:
      • перейти cd "C:\Program Files\Telegraf"
      • выполнить telegraf.exe -config "C:\Program Files\Telegraf\telegraf.conf"
    • проверить запись данных = DataExplorer - Query - Submit
  4. Подключить InfluxDB в jMeter (инструкция 15.3.2). Установить параметры Backend Listener:
    • Backend Listener implementation = org.apache.jmeter.visualizers.backend.influxdb.InfluxdbBackendListenerClient
    • influxdbMetricsSender = org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender
    • influxdbUrl = http://localhost:8086/api/v2/write?org=ogrNameInfluxDB&bucket=dbNameInfluxDB
    • application = InfluxDB2
    • measurement = jmeter
    • summaryOnly = false
    • samplersRegex = .*
    • percentiles = 90;95;99
    • testTitle = testName
    • eventTags = оставить пустым
    • influxdbToken = admin’sTokenInfluxDB
    • samplersList = metrics
  5. Подключить InfluxDB в Grafana (инструкция). Установить параметры:
    • Query Language = Flux
    • URL = http://localhost:8086
    • Basic auth = in
    • Basic Auth Details:
      • user = admin
      • password = 12345678
    • InfluxDB Details:
      • organization = ogrNameInfluxDB
      • token = admin’sTokenInfluxDB
      • default bucket = dbIdInfluxDB
  6. Подключить дашборд в Grafana:

Время отклика (агрегат)

Отчеты: Aggregate Report, jp@gc - Response Times Percentiles, jp@gc - Response Times Distribution
Показывает количественное и процентное распределение времени отклика запросов по группам: минимальное, среднее, максимальное время отклика, ошибки.


Количество пользователей

Отчеты: jp@gc - Active Threads Over Time
Показывает, как пользователи заходят в приложение (количество потоков) и используется для контроля правильности подачи нагрузки.


Время отклика (детально)

Отчеты: Response Time Graph, jp@gc - Response Times Over Time, jp@gc - Connect Times Over Time, jp@gc - Response Times vs Threads
Показывает время ответа на запросы к приложению. Время отклика должно быть равномерным, без пиков для всех операций на протяжении всей ступени нагрузки, а также коррелировать с увлечением нагрузки. Если на графике видны пики, значит, в этот момент приложение не отвечало по какой-то причине.


Время задержки (детально)

Отчеты: jp@gc - Response Latencies Over Time
Показывает время между окончанием отправки запроса до получения первого ответного пакета от системы. Желательно, стобы параметр стремился к нулю. Если параметр растет, значит присутствуют задержки на сетевом уровне.


Количество запросов за 1 секунду

Отчеты: jp@gc - Hits per Second, jp@gc - Transaction Throughput vs Threads
Показывает сколько запросов может выдержать ваша система под нагрузкой. Провал, а затем резкий рост признак скопления запросов на входе в приложение (появление очереди).


Количество транзакций за 1 секунду

Отчеты: jp@gc - Transactions per Second
Показывает количество транзакций (в рамках транзакции может быть множество запросов) за 1 секунду в разрезе: успешные / завершены с ошибкой.


Статус ответов

Отчеты: jp@gc - Response Codes per Second
Показывает распределения количества ошибок по кодам ответа приложения — удобно использовать для классификации ошибок.


Пропускная способность приложения

Отчеты: jp@gc - Bytes Throughput Over Time
Показывает пропускную способность приложения: какой объем данных был отправлен и обработан приложением в единицу времени (бит в секунду).


Graph Results (агрегат)

Отчеты: Graph Results (отзывчивость сервера)
(1) Average синий - среднее время выполнения запроса.
(2) Data черный - время отклика на запрос.
(3) Throughput зеленый - пропускная способность (количество запросов, которые обрабатывает сервер).
(4) Deviation красный - стандартное отклонение.

  • чем выше 3 и ниже 2, тем сервер производительнее;
  • если 2 больше 3, тогда сервер не может справиться с нагрузкой;
  • если 1 растет, а 3 нет, тогда запросы становятся в очередь,наступила перегруженность сервера;
  • если 1 не растет, тогда сервер выдерживает нагрузку.

НАЛОЖЕНИЕ ГРАФИКОВ

Отчеты: jp@gc - Composite Graph
(1) jp@gc - Active Threads Over Time = количество пользователей. Позволяет сравнить планируемую нагрузку с реальной.
(2) jp@gc - Response Times Over Time = среднее время обработки запроса. Показывает скорость ответа сервера на запросы.
(3) jp@gc - Hits per Second = количество запросов. Показывает, сколько запросов выдерживает система.
(4) jp@gc - Transactions per Second = количество запросов, завершившихся ошибкой. Показывает число и тип ошибок.
(5) jp@gc - Bytes Throughput Over Time = количество отправляемых данных. Показывает объем данных, который система может прокачать в заданный интервал времени.

  • 1+2 = показывает зависимость количества пользователей и среднего времени обработки запроса;
  • 1+3 = показывает зависимость количества пользователей и количества запроса;
  • 1+4 = показывает зависимость количества пользователей и количества запросов, завершившихся ошибкой;
  • 1+5 = показывает зависимость количества пользователей и количества отправляемых данных. Рост нагрузки должен приводить к планомерному росту объема данных, графики должны коррелировать. Расхождения или резкие выбросы указывают на проблемы с сетью и очередью запросов;
  • 2+3 = показывает зависимость среднего времени обработки запроса и количества запросов;
  • 2+4 = показывает зависимость среднего времени обработки запроса и количества запросов, завершившихся ошибкой;
  • 2+5 = показывает зависимость среднего времени обработки запроса и количества отправляемых данных. Всплески указывают на проблемы с сетью и очередью запросов;
  • 3+4 = показывает зависимость количества запросов и количества запросов, завершившихся ошибкой;
  • 3+5 = показывает зависимость количества запросов и количества отправляемых данных. Графики должны коррелировать. Всплески указывают на отправку неправильных запросов;
  • 4+5 = показывает зависимость количества запросов, завершившихся ошибкой и количества отправляемых данных. Позволяет найти объем данных при котором система начинает генерировать ошибки.

статья Анализ результатов нагрузочного тестирования