Да, опять статья про 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 тестов. Для измерения покрытия используем
временем запросов (ищем медленные запросы)
остальными тестовыми метриками