Awesome
Описание репозитория
Появилась новая версия основанная на InfluxDb 2 с языком flux и разворачиваемая через docker-compose - https://github.com/kirillyu/jmeterReports2
Данный репозиторий содержит в себе темплейт для 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
На выходе вы получите несколько Grafana дашбордов:
1. Test Trends
<img src="https://user-images.githubusercontent.com/9977326/89025122-f32d2580-d32e-11ea-88d4-de8cc93ce4ba.png" width="100%"></img>
Дашборд позволяет переключаться между проектами и смотреть суммарные метрики по каждому из них.
- Левая верхняя таблица - показывает тренд изменений среднего времени отклика и процента ошибок в длительных тестах (Stability).
- Правая верхняя - аналогична левой, но показывает результаты для коротких тестов (Stress).
- Нижняя левая - содержит лог запусков по этому проекту (показывает только запуски, длительность которых превышает 3 часа - это значение настраиваемое). Также имеются ссылки на подробные метрики выбранного запуска. При нажатии на ссылку попадаем в дашборд №2 - Test Metrics.
- Нижняя правая - содержит все запуски по всем проектам с фильтром, аналогично левой таблице.
<a name="metrics"/>2. Test Metrics
<img src="https://user-images.githubusercontent.com/9977326/89027755-c6c7d800-d333-11ea-97b4-3cec54facd4c.png" width="100%"></img> <img src="https://user-images.githubusercontent.com/9977326/89029561-68045d80-d337-11ea-8120-4d95a5427635.PNG" width="100%"></img> <img src="https://user-images.githubusercontent.com/9977326/89029704-aa2d9f00-d337-11ea-95c3-7f9e222786b8.PNG" width="100%"></img> <img src="https://user-images.githubusercontent.com/9977326/89030566-676cc680-d339-11ea-904f-0d97978a48d1.png" width="100%"></img> <img src="https://user-images.githubusercontent.com/9977326/89030707-b155ac80-d339-11ea-9e2f-832b9b9e22b4.PNG" width="100%"></img>
На этом дашборде собрана полная информация по выбранному тесту. Вручную можно выбрать:
- Проект
- Количество отображаемых запусков
- Нужный запуск
- Конкретную операцию этого запуска. По ней появятся детальные метрики в конце дашборда Этот дашборд используется для осмотра результатов и их анализа.
3. Render Dash
Данный дашборд аналогичен дашборду №2 - Test Metrics, но он содержит определенные фильтры и настройки, которые снижают наглядность результатов, но необходимы для рендеринга. К примеру, на нем отключена пагинация в таблицах и графики содержат топ 5 операций, остальные вынесены в "Other".
<a name="#jmeter"/><h1>Jmeter</h1> </a>
В самом ApacheJMeter для использования темплейта, после его установки, достаточно просто нажать на вкладку File, выбрать Templates..., кликнуть в выпадающем списке на "Add autogenerated reports..." и нажать на Merge. Мержить можно к уже готовым скриптам, после чего оформить нужные Thread Groups аналогично Main. <img src="https://user-images.githubusercontent.com/9977326/89032614-b583c900-d33d-11ea-8b84-b8d00d7fb20a.png" width="100%"></img> После добавления получится такой тест-план:
<img src="https://user-images.githubusercontent.com/9977326/89038166-7f981200-d348-11ea-83fd-45921fd38171.png" width="100%"></img>
<a name="install"/><h1> Установка и настройка</h1> </a>
- Первоначально необходимо поставить сам Apache Jmeter, получить актуальную версию можно по <a href="https://jmeter.apache.org/download_jmeter.cgi">ссылке</a>.
- Далее нужны <a href="https://dl.influxdata.com/influxdb/releases/influxdb-1.8.0_windows_amd64.zip">InfluxDB</a> и <a href="https://dl.grafana.com/oss/release/grafana-7.0.0.windows-amd64.msi">Grafana</a> - ссылка для Windows
- Настраивать ничего не нужно на данном этапе. Из папки с InfluxDB запускаем файл influxd.exe - по дефолту Influx будет на порту 8086, кастомизация происходит в файле influxdb.conf,
- Для запуска Grafana достаточно стартануть файл grafana-server - она запустится на порту 3000, конфигурационный файл defaults.ini
- Confluence - корпоративная система, подразумевается, что он уже развернут в вашей компании. Если это не так - можно взять его <a href="https://www.atlassian.com/ru/software/confluence/download">отсюда</a>, но настройки потребуется провести самостоятельно. Никаких кастомных настроек не требуется, просто наличие рабочего SPACE и пользователя, который имеет доступ к API
- Устанавливаем <a href="https://www.google.com/intl/ru_ru/chrome/">Chrome</a> на машину, с которой будет генерироваться отчет
Желательно, чтобы машина, с которой будет подаваться нагрузка была минимально обременена сервисами, особенно Grafana, а тем более Confluence - иначе велик риск нехватки ресурсов для проведения нагрузки.
После того как инструментарий развернут, можно переходить к его интеграции с данным репозиторием. Это делается в несколько довольно простых шагов:
- Скачиваем репозиторий
- Содержимое папки JmeterUpdate переносим с заменой в папку apache-jmeter-..., то есть корень вашего Apache Jmeter. Важно, что в папке /bin находится chromedriver.exe для Windows, с ним бывают некоторые проблемы. Если они возникнут или используется другая операционная система необходимо попробовать <a href="https://chromedriver.chromium.org/downloads">другие версии драйвера</a>.
- Создаём новую базу в InfluxDB (например, jmeter). <a href="https://docs.influxdata.com/influxdb/v1.8/introduction/get-started/#creating-a-database">Инструкция по созданию</a>
- Первичная настройка Grafana заключается в подключении нужного Data Source. Configuration -> Data Sources -> Add Data Source -> InfluxDB -> вводим параметры подключения с указанием машины, на которую поставлен InfluxDB и порта (по дефолту 8086). Database вводим название базы, созданной в п.3. После этого нажимаем Save & Test.
<img src="https://user-images.githubusercontent.com/9977326/89129564-f2e78280-d506-11ea-92b7-ee3cff6bade9.png" width="100%"></img>
- Импортируем все дашборды из репозитория в Grafana. Правильно делается это так: в интерфейсе Grafana слева есть вкладка Dashboards, в ней нужно выбрать Manage. Далее на открывшейся странице выбираем Import, после чего нажать на Upload.json, туда по очереди загрузить 3 .json файла из репозитория, в каждом из которых необходимо указать Data Source из пункта 3.
<img src="https://user-images.githubusercontent.com/9977326/89063549-06f97b80-d371-11ea-9184-bbd72ea94e02.png" width="100%"></img>
- Чтобы в Grafana заработали перекрестные ссылки между дашбордами, в случае если она развернута не на localhost, необходимо прописать хост Grafana в переменных двух дашбордов: Test Trends и Test Metrics.
<img src="https://user-images.githubusercontent.com/9977326/89130169-71462380-d50b-11ea-9563-3d67b745bccf.png" width="100%"></img>
- Также нам понадобится от Grafana ключ API, который необходимо сгенерировать.
<img src="https://user-images.githubusercontent.com/9977326/89258206-62a55c80-d630-11ea-89ea-7889b3d4a34f.png" width="100%"></img>
-
Последним этапом настройки Grafana будет установка плагина рендера графиков. Его можно взять <a href="https://grafana.com/grafana/plugins/grafana-image-renderer/installation">тут</a>. Там же описана его установка. После нее нужно перезапустить Grafana (необъяснимо, но факт - иногда этот плагин не требуется).
-
Теперь к Confluence. Для его использования нам нужно создать страницу-папку. В любом месте нашего пространства и с любой степенью вложенности. В эту папку, как дочерние элементы будут создаваться страницы с отчетами. Всё создается простым нажатием кнопки "Создать" вверху интерфейса.
<img src="https://user-images.githubusercontent.com/9977326/89263547-1f4feb80-d63a-11ea-87b4-debfba1fc886.png" width="100%"></img>
- Далее, внутри этой папки создаем еще одну страницу - она должна быть дочерней по отношению к странице в п.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!
После добавления черновик шаблона будет выглядеть вот так:
<img src="https://user-images.githubusercontent.com/9977326/89263550-20811880-d63a-11ea-9c29-52794881da72.png" width="100%"></img>
Такой шаблон после теста будет сформирован в вот такую страницу:
<img src="https://user-images.githubusercontent.com/9977326/89263553-20811880-d63a-11ea-8052-457d7a2ed8e2.png" width="100%"></img>
- Осталось настроить только JMeter. После того как в тест добавляется Template необходимо заполнить только User Defined Variables
<img src="https://user-images.githubusercontent.com/9977326/89268616-74dbc680-d641-11ea-8089-e90c4522bc09.PNG" width="100%"></img>
Все переменные, кроме project_name, host, version_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_source - он был сформирован на п.4. Переменная чувствительна к регистру
- grafana_api_key - это то, что мы получили в п.7.
- grafana_login - логин любого пользователя, у которого есть права типа Viewer и выше
- grafana_pass - пароль того же пользователя
- grafana_host - хост, на котором развернута Grafana
- grafana_port - порт, на котором развернута Grafana
- confl_user - логин пользователя confluence, который имеет доступ к Rest API
- confl_pass - пароль того же пользователя
После всех этих шагов, настройка завершена. Можно запускать любые тесты и наслаждаться отчетами и графиками. Темплейт буду обновлять в зависимости от найденных багов и неудобств. Если возникают вопросы и предложения - смело пишите в телеграмм @login40k - буду рад помочь.