Данный репозиторий содержит в себе темплейт для ApacheJmeter, который поволяет генерировать и заливать отчет в Confluence. К темплейту прилагается нужное окружение для ApacheJmeter, в которое входит папка lib из корня - в ней содержатся все используемые плагины. Там же расположен chromedriver.exe, необходимый для работы темплейта. Репозиторий, помимо этого, включает в себя все необходимые для рендера графиков и анализа результатов дашборды Grafana, которые полностью интегрированы с данным темплейтом.
- JDK, желательно 1.8+ (Java)
- ApacheJmeter 5.3
- InfluxDB 1.8
- Grafana 7.0.0 + Grafana Image Renderer Plugin
- Установленный Google Chrome на машине, где будет генерироваться отчет
- Confluence (не Cloud версия)
На выходе вы получите несколько Grafana дашбордов:
1. Test Trends
Дашборд позволяет переключаться между проектами и смотреть суммарные метрики по каждому из них.
- Левая верхняя таблица - показывает тренд изменений среднего времени отклика и процента ошибок в длительных тестах (Stability).
- Правая верхняя - аналогична левой, но показывает результаты для коротких тестов (Stress).
- Нижняя левая - содержит лог запусков по этому проекту (показывает только запуски, длительность которых превышает 3 часа - это значение настраиваемое). Также имеются ссылки на подробные метрики выбранного запуска. При нажатии на ссылку попадаем в дашборд №2 - Test Metrics.
- Нижняя правая - содержит все запуски по всем проектам с фильтром, аналогично левой таблице.
На этом дашборде собрана полная информация по выбранному тесту. Вручную можно выбрать:
- Проект
- Количество отображаемых запусков
- Нужный запуск
- Конкретную операцию этого запуска. По ней появятся детальные метрики в конце дашборда Этот дашборд используется для осмотра результатов и их анализа.
3. Render Dash
Данный дашборд аналогичен дашборду №2 - Test Metrics, но он содержит определенные фильтры и настройки, которые снижают наглядность результатов, но необходимы для рендеринга. К примеру, на нем отключена пагинация в таблицах и графики содержат топ 5 операций, остальные вынесены в "Other".
В самом ApacheJMeter для использования темплейта, после его установки, достаточно просто нажать на вкладку File, выбрать Templates..., кликнуть в выпадающем списке на "Add autogenerated reports..." и нажать на Merge. Мержить можно к уже готовым скриптам, после чего оформить нужные Thread Groups аналогично Main. После добавления получится такой тест-план:
- Превоначально необходимо поставить сам Apache Jmeter, получить актуальную версию можно по ссылке.
- Далее нужны InfluxDB и Grafana - ссылка для Windows
- Настраивать ничего не нужно на данном этапе. Из папки с InfluxDB запускаем файл indluxd - по дефолту Influx будет на порту 8086, кастомизация происходит в файле influxdb.conf
- Для запуска Grafana достаточно стартануть файл grafana-server - она запустится на порту 3000, конфигурационный файл defaults.ini
- Confluence - корпоративная система, подразумевается, что он уже развернут в вашей компании. Если это не так - можно взять его отсюда, но настройки потребуется провести самостоятельно. Никаких кастомных настроек не требуется, просто наличие рабочего SPACE и пользователя, который имеет доступ к API
- Устанавливаем Chrome на машину, с которой будет генерироваться отчет
Желательно, чтобы машина, с которой будет подаваться нагрузка была минимально обременена сервисами, особенно Grafana, а тем более Confluence - иначе велик риск нехватки ресурсов для проведения нагрузки.
После того как инструментарий развернут, можно переходить к его интеграции с данным репозиторием. Это делается в несколько довольно простых шагов:
- Скачиваем репозиторий
- Содержимое папки JmeterUpdate переносим с заменой в папку apache-jmeter-..., то есть корень вашего Apache Jmeter. Важно, что в папке /bin находится chromedriver.exe для Windows, с ним бывают некоторые проблемы. Если они возникнут или используется другая операционная система необходимо попробовать другие версии драйвера.
- Первичная настройка Grafana заключается в подключении нужного Data Source. Configuration -> Data Sources -> Add Data Source -> InfluxDB -> вводим параметры подключения с указанием машины, на которую поставлен InfluxDB и порта (по дефолту 8086). Database в нашем случае - jmeter. После этого нажимаем Save & Test.
- Импортируем все дашборды из репозитория в Grafana. Правильно делается это так: в интфейсе Grafana слева есть вкладка Dashboards, в ней нужно выбрать Manage. Далее на открывшейся странице выбираем Import, после чего нажать на Upload.json, туда по очереди загрузить 3 .json файла из репозитория, в каждом из которых необходимо указать Data Source из пункта 3.
- Чтобы в Grafana заработали перекрестные ссылки между дашбордами, в случае если она развернута не на localhost, необходимо прописать хост Grafana в переменных двух дашбордов: Test Trends и Test Metrics.
- Также нам понадобится от Grafana ключ API, который необходимо сгенерировать.
-
Последним этапом настройки Grafana будет установка плагина рендера графиков. Его можно взять тут. Там же описана его установка. После нее нужно перезапустить Grafana (необъяснимо, но факт - иногда этот плаигн не требуется).
-
Теперь к Confluence. Для его использования нам нужно создать страницу-папку. В любом месте нашего пространства и с любой степенью вложенности. В эту папку, как дочерние элементы будут создаваться страницы с отчетами. Всё создается простым нажатием кнопки "Создать" вверху интерфейса.
- Далее, внутри этой папки создаем еще одну страницу - она должна быть дочерней по отношению к странице в п.8, это будет шаблон нашего отчета, которым сейчас необходимо минимально наполнить. Я подготовил черновой вариант, который вы можете попробовать у себя и изменить его как вам будет удобно. Ключевым моментом являются названия картинок графиков - они должны заранее совпадать с названиями файлов, выгружаемых при рендере из Grafana в блоке Jmeter Metrics - по дефолту это так. Добавляется черновик следующим образом:
- Переходим на страницу шаблона и нажимаем редактировать
- В верхней панели редактора нажимаем "+" ("Вставить прочий контент") или просто нажимаем ctrl + shift + d.
- В открышееся окно вставляем разметку типа "Confluence wiki":
VERSION_NUM
Дата формирования отчета: RELEASE_DATE
Информация о проекте:
***
***
Сводная таблица:
ALL_TABLE
Ошибки:
ERROR_TABLE
Тест проходил с TIME_FROM до RELEASE_DATE
Метрики теста:
!VUsers.png!
!ErrorPerSec.png!
!TotalTransactions.png!
!EachOperation.png!
!90.png!
!95.png!
!99.png!
!TransactionsResponseTime.png!
После добавления черновик шаблона будет выглядить вот так:
Такой шаблон после теста будет сформирован в вот такую страницу:
- Осталось настроить только JMeter. После того как в тест добавляется Template необходимо заполнить только User Defined Variables
Все перемнные, кроме project_name, host, vaersion_get_path, conf_folger и conf_templ, чаще всего, выставляют 1 раз. После их установки можно пересохранить темплейт (аналогично сохранению любого .jmx, но сделать это нужно по пути %jmeter_home%/bin/templates/Influx_Confluence.jmx с заменой), тогда при добавлении темплейта в любой скрипт, эти данные будут уже установлены верно.
- project_name - Название текущего проекта, его для каждого приложения стоит выставлять свое. Требуется добавлять в DateAndVarSet запросе в switch case данные каждого проекта, чтобы использовался свой шаблон. По этому полю осуществялется группировка и фильрация в Grafana
- custom_duration - Поле используется для удобства и выводиться в тег запуска в графане. Поле обязательно, но в данной реализации кроме как на отображение ни на что не влияет. Можно использовать как перменную, для установки длительности теста
- influx_host - Хост InfluxDb
- test_name - Обязательный параметр, в дальнейшем будет использоваться для фильтрации в дашборде Test Trends
- host - Хост вашего приложения, участвует в формировании названия отчета, которое в свою очередь получается из метки времени и текущей вресии приложения. Версия получается по запросу host + /version_get_path.
- version_get_path - Запрос к API для получения текущей версии приложения. Если не планируете её использовать отключите запрос GetVersion и закомменитруйте 19 строку в DateAndVarSet
- conf_folder - id родительской страница (папка), в которую будут добавляться отчеты в Confluence - id можно получить из адресной строки, после входа в режим редактирования страницы.
- conf_templ - id страницы с шаблоном отчетом, которая должна быть дочерней по отношению к conf_folder
- conf_host - ссылка на ваш Confluence
- chromedriver_path - путь до chromedriver, который будет использоваться. По дефолту находитсья в %jmeter_home%/bin и контрукция, указанная в параметрах ведет к нему
- space - ваше рабочее пространство (область) в confluence. Можно получить из тела ответа, сделав запрос ${conf_host}/rest/api/content/АЙДИ_ЛЮБОЙ_СТРАНИЦЫ?expand=body.storage
- grafana_data_souce - он был сформирован на п.3. Переменная чувствительна к регистру
- grafana_api_key - это то, что мы получили в п.6.
- grafana_login - логин любого пользователя, у которого есть права типа Viewer и выше
- grafana_pass - пароль того же пользователя
- grafana_host - хост, на котором развернута Grafana
- grafana_port - порт, на котором развернута Grafana
- confl_user - логин пользователя confluence, который имеет доступ к Rest API
- confl_pass - пароль того же пользователя
После всех этих шагов, настройка заверешена. Можно запускать любые тесты и наслаждаться отчетами и графиками. Темплейт буду обновлять в зависимости от найденных багов и неудобств. Если возникают вопросы и предложения - смело пишите в телеграмм @login40k - буду рад помочь.