/jmeterReports

Jmeter autogenerater reports after test to Confluence, using grafana custom dushboards.

Описание репозитория

Появилась новая версия основанная на InfluxDb 2 с языком flux и разворачиваемая через docker-compose - https://github.com/kirillyu/jmeterReports2

Данный репозиторий содержит в себе темплейт для ApacheJmeter, который позволяет генерировать и заливать отчет в Confluence. К темплейту прилагается нужное окружение для ApacheJmeter, в которое входит папка lib из корня - в ней содержатся все используемые плагины. Там же расположен chromedriver.exe, необходимый для работы темплейта. Репозиторий, помимо этого, включает в себя все необходимые для рендера графиков и анализа результатов дашборды Grafana, которые полностью интегрированы с данным темплейтом.

Требования к среде использования

  1. JDK, желательно 1.8+ (Java)
  2. ApacheJmeter 5.3
  3. InfluxDB 1.8
  4. Grafana 7.0.0 + Grafana Image Renderer Plugin
  5. Установленный Google Chrome на машине, где будет генерироваться отчет
  6. Confluence (не Cloud версия)

Grafana

На выходе вы получите несколько Grafana дашбордов:

1. Test Trends

Дашборд позволяет переключаться между проектами и смотреть суммарные метрики по каждому из них.

  • Левая верхняя таблица - показывает тренд изменений среднего времени отклика и процента ошибок в длительных тестах (Stability).
  • Правая верхняя - аналогична левой, но показывает результаты для коротких тестов (Stress).
  • Нижняя левая - содержит лог запусков по этому проекту (показывает только запуски, длительность которых превышает 3 часа - это значение настраиваемое). Также имеются ссылки на подробные метрики выбранного запуска. При нажатии на ссылку попадаем в дашборд №2 - Test Metrics.
  • Нижняя правая - содержит все запуски по всем проектам с фильтром, аналогично левой таблице.

2. Test Metrics

На этом дашборде собрана полная информация по выбранному тесту. Вручную можно выбрать:

  • Проект
  • Количество отображаемых запусков
  • Нужный запуск
  • Конкретную операцию этого запуска. По ней появятся детальные метрики в конце дашборда Этот дашборд используется для осмотра результатов и их анализа.

3. Render Dash

Данный дашборд аналогичен дашборду №2 - Test Metrics, но он содержит определенные фильтры и настройки, которые снижают наглядность результатов, но необходимы для рендеринга. К примеру, на нем отключена пагинация в таблицах и графики содержат топ 5 операций, остальные вынесены в "Other".

Jmeter

В самом ApacheJMeter для использования темплейта, после его установки, достаточно просто нажать на вкладку File, выбрать Templates..., кликнуть в выпадающем списке на "Add autogenerated reports..." и нажать на Merge. Мержить можно к уже готовым скриптам, после чего оформить нужные Thread Groups аналогично Main. После добавления получится такой тест-план:

Установка и настройка

  • Первоначально необходимо поставить сам Apache Jmeter, получить актуальную версию можно по ссылке.
  • Далее нужны InfluxDB и Grafana - ссылка для Windows
  • Настраивать ничего не нужно на данном этапе. Из папки с InfluxDB запускаем файл influxd.exe - по дефолту Influx будет на порту 8086, кастомизация происходит в файле influxdb.conf,
  • Для запуска Grafana достаточно стартануть файл grafana-server - она запустится на порту 3000, конфигурационный файл defaults.ini
  • Confluence - корпоративная система, подразумевается, что он уже развернут в вашей компании. Если это не так - можно взять его отсюда, но настройки потребуется провести самостоятельно. Никаких кастомных настроек не требуется, просто наличие рабочего SPACE и пользователя, который имеет доступ к API
  • Устанавливаем Chrome на машину, с которой будет генерироваться отчет

Желательно, чтобы машина, с которой будет подаваться нагрузка была минимально обременена сервисами, особенно Grafana, а тем более Confluence - иначе велик риск нехватки ресурсов для проведения нагрузки.

После того как инструментарий развернут, можно переходить к его интеграции с данным репозиторием. Это делается в несколько довольно простых шагов:

  1. Скачиваем репозиторий
  2. Содержимое папки JmeterUpdate переносим с заменой в папку apache-jmeter-..., то есть корень вашего Apache Jmeter. Важно, что в папке /bin находится chromedriver.exe для Windows, с ним бывают некоторые проблемы. Если они возникнут или используется другая операционная система необходимо попробовать другие версии драйвера.
  3. Создаём новую базу в InfluxDB (например, jmeter). Инструкция по созданию
  4. Первичная настройка Grafana заключается в подключении нужного Data Source. Configuration -> Data Sources -> Add Data Source -> InfluxDB -> вводим параметры подключения с указанием машины, на которую поставлен InfluxDB и порта (по дефолту 8086). Database вводим название базы, созданной в п.3. После этого нажимаем Save & Test.

  1. Импортируем все дашборды из репозитория в Grafana. Правильно делается это так: в интерфейсе Grafana слева есть вкладка Dashboards, в ней нужно выбрать Manage. Далее на открывшейся странице выбираем Import, после чего нажать на Upload.json, туда по очереди загрузить 3 .json файла из репозитория, в каждом из которых необходимо указать Data Source из пункта 3.

  1. Чтобы в Grafana заработали перекрестные ссылки между дашбордами, в случае если она развернута не на localhost, необходимо прописать хост Grafana в переменных двух дашбордов: Test Trends и Test Metrics.

  1. Также нам понадобится от Grafana ключ API, который необходимо сгенерировать.

  1. Последним этапом настройки Grafana будет установка плагина рендера графиков. Его можно взять тут. Там же описана его установка. После нее нужно перезапустить Grafana (необъяснимо, но факт - иногда этот плагин не требуется).

  2. Теперь к Confluence. Для его использования нам нужно создать страницу-папку. В любом месте нашего пространства и с любой степенью вложенности. В эту папку, как дочерние элементы будут создаваться страницы с отчетами. Всё создается простым нажатием кнопки "Создать" вверху интерфейса.

  1. Далее, внутри этой папки создаем еще одну страницу - она должна быть дочерней по отношению к странице в п.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!

После добавления черновик шаблона будет выглядеть вот так:

Такой шаблон после теста будет сформирован в вот такую страницу:

  1. Осталось настроить только JMeter. После того как в тест добавляется Template необходимо заполнить только User Defined Variables

Все переменные, кроме 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 - буду рад помочь.