jMeter
10 шагов для запуска тестирования производительности с Apache JMeter (смотреть).
- Установить JAVA (скачать), проверить: java -version
- Установить jMeter (скачать)
-
Установить 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)
Сводная таблица
Интерфейс 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
-
Установить Grafana (инструкция)
- скачать и запустить инсталятор
- перейти http://localhost:3000, login=admin, password=admin
-
Установить InfluxDB (инструкция)
- скачать и разархивировать в папку C:\Program Files\InfluxData\influxdb
- открыть cmd, выполнить "C:\Program Files\InfluxData\influxdb">influxd.exe
- перейти http://localhost:8086, login=admin, password=12345678
-
Установить 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
-
Подключить 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
-
Подключить 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
-
Подключить дашборд в Grafana:
- скачать grafana-dashboard.json
- подключить = Dashboards - Import
Время отклика (агрегат)
Отчеты: 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 = показывает зависимость количества запросов, завершившихся ошибкой и количества отправляемых данных. Позволяет найти объем данных при котором система начинает генерировать ошибки.