2. Немного теории
• Apache JMeter — инструмент для проведения
нагрузочного тестирования, разрабатываемый Apache
Software Foundation.
• Он способен проводить нагрузочные тесты для JDBC-
соединений, FTP, LDAP, SOAP, JMS, POP3, IMAP, HTTP и TCP.
• Организовано логирование результатов теста и
разнообразная визуализация результатов в виде
диаграмм, таблиц и т. п.
• Архитектура, поддерживающая плагины сторонних
разработчиков, позволяет дополнять инструмент новыми
функциями.
3. Что пишут люди
• Широкий выбор готовых компонентов. В JMeter есть все.
Во всяком случае — практически все, что нужно для
тестирования. В противном случае под конкретную задачу
всегда можно написать новый компонент.
• Возможность работать, как с UI, так и без него.
Выполнение тестовых сценариев в командной строке
позволяет полноценно интегрировать их в сценарии CI
инструментов.
• JMeter умеет кластеризоваться, т.е. вы можете создать
ферму нагрузочных машин, управляемых как единое
целое.
• Больше тут: https://jetruby.com/ru/blog/почему-мы-
используем-jmeter/
4. Запуск JMeter
• Для работы над созданием и отладкой теста мы
используем JMeter UI
6. • JMeter может быть запущен на любой системе, где установлена Java
– Mac OS
– Windows
– Linux
7. Перейдем к интерфейсу
• Тест план имеет древовидную структуру
• Внутри тест плана располагаются тесты, которые могут
состоять из одного или нескольких запросов, графиков,
прочих модификаторов ввода/вывода
• Создадим один тест на примере запроса «login» в нашем
продукте
• Тест будет запущен один раз в одном потоке
• Тест состоит из одного запроса (с добавлением
отсутствующего header) и таблицы результатов
8.
9. • Запрос будет отправлен на сервер a1-qa.dev.whirl.sg
• В теле запроса передается JSON с данными (Логин –
Admin, Пароль – Admin)
• Добавлен header который отсутствует (Content Type) – без
него запрос будет не валидным
• После запуска результат выполнения теста появляется в
таблице результатов (одна запись соответствует одному
запросу)
• Детали запроса (адрес запроса, тело запроса, headers
запроса) и ответ сервера отображается в соответствующих
вкладках
10.
11.
12.
13.
14. А что если усложнить?
• Если продолжать развивать тест, то мы невольно
столкнемся со следующими проблемами:
– Постоянное повторение имени сервера для каждого запроса
(решается созданием и вызовом переменной)
– Зависимость последующих запросов от id сессии (решается
парсингом ответа сервера при логине и добавлением переменной
в headers)
– Зависимость последующих запросов/потоков от id страницы
(решается генерацией уникального ключа и добавлением
переменной в тело запросов)
21. Подведем итоги!
• Мы создали тест, который может быть масштабирован как
в длину (количество запросов), так и в ширину (количество
потоков)
• Мы научились генерировать случайные данные для
переменных
• Мы научились парсить ответы для дальнейшего
переиспользования их в переменных
• После запуска мы видим в таблице результатов что все
отработало
• Проверяем информацию, которую отправили и которую
получили
24. Запустим наш тест с нагрузкой
• Запустим тест из двух запросов
• Будут использованы 5 потоков (пользователей)
• Каждый запрос будет отправлен 3 раза
• Перерыв между запросами – 2 секунды
• Добавим несколько разных вариантов отчетов
• В суммарной таблице видим средние данные по каждому
запросу
• На графике видим отчет о длительности запросов
• Пройдемся более детально…
31. Попробуем запустить через консоль
• Заходим в папку и запускаем jmeter в консоли
• Флаг –n означает запуск без GUI
• Флаг –t позволяет вводить путь к файлу с тест планом
• Флаг –l позволяет указать куда сохранить файл отчета
• Отчет опционален и поддерживается в формате csv
34. Попробуем запустить поломанные
тесты
• Чтобы проверить пользу нагрузочного тестирования мы
можем проверить разные виды запросов:
– Запрос, который написан неверно
– Запрос, который усложнен и будет выполняться дольше обычного
• Рассмотрим репорты после запуска этих запросов
– Таблицу результатов
– Суммарный отчет
– График длительности