Да, опять статья про Grafana и визуализацию метрик тестов.
Ваши автотесты интегрированы в CI и рядом лежит TMS (Test Management System), такие как Allure, qase, и так далее, где вы/ваша команда храните тест-кейсы, чек листы и результаты прогонов. По результатам тестирования строятся графики, рисуются цифры и так далее. Но как часто вы смотрите на эти результаты ? Показываете разработчикам, менеджерам? Достаточно ли этих цифр или хочется больше?
Мне нет. Я работал с разными TMS и местные дашборды были или являются для меня болью. Да, все красиво, но сделать что-то своё они не давали (или давали, но очень скудно). Нам приходилось делать свои отчёты, вычислять свои метрики, но единой точки входа, чтобы всё это посмотреть, не было (и я до сих пор не понимаю, почему так). В нашей компании были:
отчеты тестов в TMS
кастомный отчет по покрытию API
кастомный отчет по нагрузке (свое решение)
отчет в GitLab pages
состояние тестов в telegram
Да, часть метрики умеет выводить TMS, но сделать это всё в одном месте не получится. Поэтому, мы обратили внимание на Grafana (идея пришла давно, но статья Игоря подтолкнула ссылка).
Задача
Собрать результаты тестов (общее количество, количество успешных/упавших тестов и так далее) и отобразить их в Grafana.
Что мы будем использовать?
supabase: онлайн бд с рест апи. Хотя, что использовать в этом пункте, не особо важно, можно вашу бд или Prometeus и так далее
grafana: для вывода результатов
любой популярный язык программирования, на котором написаны тесты
Supabase
Supabase – это реляционная база данных, использующая SQL-синтаксис.
Регистрируем нового пользователя, выбираем бесплатный тариф.
Создаём новую базу данных (проект)
Не забудьте скопировать пароль!
Так как эта статья про метрики, то не будем заниматься нормализацией, создадим одну большую таблицу, с такими полями:
Где мы будем хранить результаты наших прогонов.
После того, как создали таблицы, идём в настройки. Нас интересуют url и secret.
Тесты
Для начала соберём наши метрики, которые мы будем отправлять.
Для сбора результатов тестов смотрите документации к вашим тестовым фреймворкам, например, для js/ts playwright это будет reporter, для python test это будет хуки pytest.
В самом конце я приведу ссылку на репозиторий тестов и сбора статистики на Python.
И последнее: нам надо отправлять данные в нашу бд. Для этого есть два пути:
Найти для вашего языка официальный клиент, например, для python или js.
Отправлять запросы без оберток, так как у нас база доступна через rest api. Единственное, необходимо в хедер добавить значение (кроме SUPABASE_KEY),
"Prefer": "return=representation"
чтобы нам на запрос приходил не пустой респонс боди.
Смотрите примеры в таблицах supabase
SUPABASE_KEY находится в настройках.
Тело для запроса необходимо заполнять согласно именам колонок в таблице, например:
body = {'total': 100, 'passed': 99 ...}
Grafana
Скачиваем docker image
Запускаем локально (доступ admin/admin)
docker run -d --name=grafana -p 3000:3000 grafana/grafana
В настройках находим Data sources
Добавляем host + port, database, user и password. Основные настройки нужно взять в supabase
password это пароль, который вы указали при создании бд. Делаем проверку, что подключение к базе работает.
Возвращаемся к тестам и запускаем прогон.
Проверяем нашу бд. Будет выглядеть примерно так:
Теперь возвращаемся в grafana и создаем простой дашборд, указываем наш ранее созданный data source, выбираем таблицу test и указываем поля, которые необходимо отобразить.
Вот и все! Теперь остается добавлять таблицы и наполнять их данными, которые вы собираетесь отобразить. В своих проектах мы следим за
временем тестов
данными из TMS (дергаем через api)
покрытием api тестов. Для измерения покрытия используем
временем запросов (ищем медленные запросы)
остальными тестовыми метриками
Тестовый пример на Python https://github.com/berpress/python-api-tests-grafana