Быстрый сбор метрик тестов и отображение в Grafana

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Да, опять статья про 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

Источник: https://habr.com/ru/articles/752012/


Интересные статьи

Интересные статьи

Попробуем разобраться в автоматизации тестирования ПО, сделаем обзор сервисов для автоматического тестирования, выясним, какой язык программирования лучше подходит для QA Automation. Вся информация ос...
Всем привет! В данной статье расскажу о том, как мы решали задачу нагрузочных тестов для сервиса поиска, как познакомились с замечательным K6 и о том, как ведет себя облачный Elastic Search под нагруз...
Продолжаем цикл статей об организации мониторинга. В первом материале разбирали, как и куда вообще имеет смысл навешивать алерты. Теперь поговорим о мониторинге базового серверного ПО, которое встреча...
Привет, Хабр! Меня зовут Михаил Мазуровский, я - мобильный Flutter разработчик. Сегодня я расскажу вам историю о том, как я столкнулся с худшей организацией по найму в своей жизни.
Добрый вечер хаброжители!Сегодня я предоставлю вашему вниманию небольшую статью не связанную с моими предыдущими статьями. Где-то более года назад мне пришлось делать одн...