Метрики автоматизации
Зачем, когда и как они нужны вам
Обо мне

TG: haradkou_sdet
- SDET с 2018
- Playwright labs contributor
- Certified node.js application developer (JSNAD 2023)
- Автор TG канала @haradkou_sdet
-
Помогаю с автоматизацией и нагрузкой
План
- История: Kibana experience
- Зачем нам метрики в автотестах
- Какие бывают метрики: Global/Local
- Counter
- Gauge
- Histogram
- Какие метрики в автотестах бывают
- Какие метрики в автотестах мы собираем
- История: prometheus remote write metrics
- Эволюция: OTEL метрики
- Заключение: С каких метрик вам можно начать
Дисклеймер: Playwright
Данный рассказ опирается на Playwright а также на тестовый фреимворк, который предоставляет Playwright для платформы Nodejs (@playwright/test)
Прежде чем начать
Цикл: Metrics -> Обратная связь -> метрики
Цикл SDLC
История: Kibana

Какие бывают метрики в автоматизации?
- Global - метрики, которые распростаряются на весь запуск
- Local - метрики, которые распространяются на конкретный тест
Примеры глобальных метрик
- Общее кол-во тестов
- Кол-во прошедших тестов
- Кол-во пропущенных тестов
- Кол-во тестов, которые были выполнены несолько раз (retry)
- Самая частая ошибка (например 403 unauthorized)
- Кто запустил тесты (Pipeline, кто-то из команды)
Примеры локальных метрик
- Кол-во под-шагов
- Кол-во Polling (expect.poll) до успешного получения результата
- Скорость загрузки страницы (page_load_ms)
- Количество API запросов
Всего 3 типа метрик на всё
- Counter
- Incrementor
- Histogram
Counter
const requestsMetric = new Counter("api_requests", { unit: "requests" });
const token = await http.post("server.com/login")
requestsMetric.add(1, { endpoint: "/auth", method: "POST" });
await page.goto("/some-page");
// rest code
Делает отсчет. Начинается как правило с 0 и не может уменьшаться
Gauge
const parallelMetric = new Gauge("parallel_requests", { unit: "requests" });
const req1 = http.post("server.com/login")
parallelMetric.inc({ endpoint: "/auth", method: "POST" });
const req2 = http.get("server.com/data")
parallelMetric.inc({ endpoint: "/data", method: "GET" });
await waitForAllRequests(req1, req2)
parallelMetric.dec(2) // сбиваем 2 параллельных запроса
await page.goto("/some-page");
// rest code
Тотже счетчик, но также умеет сбрасыватся к начальному значению и уменьшаться
Histogram
Что-то что имеет периодичность во времени. Как правило это что-то с измерением времени

Внутри одного отчета гистограммы всегда передается несколько цифр:
-
Количество (Count)
-
Сумма (Sum)
-
Границы корзин (Explicit Bounds)
-
Счетчики корзин (Bucket Counts)
-
Минимум и Максимум (Min/Max):
Histogram
const durationMetric = useHistogram("e2e_page_load_ms", {
description: "E2E test: simulated page load times",
unit: "ms",
});
await page.goto("/home")
duration.record(120, { route: "/home" });
await page.goto("/dashboard")
duration.record(340, { route: "/dashboard" });
await page.goto("/login")
duration.record(85, { route: "/login" });
Какие метрики в автотестах бывают
- Ручные
- Автоматические
- Полу-автоматические
Ручные метрики
Любые метрики, которые мы можем/хотим собрать через API самих фреимворков
Автомачические метрики
- Кол-во зеленых тестов (Counter)
- Кол-во упавших тестов
- Общее кол-во тестов
- Метрики системы (memory/CPU/swap) (Histogram)
- Attachment size (bytes)
Полу-автомачические метрики
-
Flacky тесты (нужно хранилище тестов и их статусов)
- MTTR (Mean Time To Recovery) для тестов. Метрика, которая показывает Красный тест -> Баг -> исправление -> Зеленый тест. Требует интаграции с менеджером задач (JIRA)
- Test Maintainability Index - Сложность теста. Кол-во шагов может быть автоматическим, но реальной картины не отражает и нужно тюнить для каждого теста отдельно
Самые сложные метрики для сбора. Но самые полезные и важные
Какие метрики в автотестах мы собираем
- Кто запустил тесты (TRIGGER, User, OS info)
- Сколько тестов в запуске
- Какая ветка/mr/коммит
- Какие новые тесты (diff с последним релизом)
- .env но не являющимися секретами (Staging #, Admin Email)
- Информация о сервисах и их версиях
- Запросы и ответы от сервисов и UI (Histograms)
- Attachments (auto instrumentation)
История: Prometheus remote write


Эволюция: OTEL
OTEL - open telemetry. Открытый стандарт для отправки и получения метрик (Collector, SDK, протокол данных OTLP)
Как начать на моем проекте?
Vitalics/playwright-prometheus-remote-write-reporter
Vitalics/playwright-labs/reporter-otel
Vitalics/playwright-labs/fixture-otel
Vitalics/playwright-labs/fixture-prometheus
Vitalics/playwright-labs/reporter-prometheus-remote-write
Playwright-labs
С каких метрик можно начать?
Начните с малого: автоматические метрики (CPU, memory, Tests pass, Test fail, Test skipped)
Можете добавить собственные метрики, когда автоматических вам будет не хватать
Подключите метрики продукта или бекенда на Dashboard
Demo: Grafana stack
Начните уже собирать метрики!
Метрики автоматизации
By vitalic gorodkov
Метрики автоматизации
- 69