Метрики автоматизации

Зачем, когда и как они нужны вам

Обо мне

TG: haradkou_sdet

  • SDET с 2018
  • Playwright labs contributor
  • Certified node.js application developer (JSNAD 2023)
  • Автор TG канала @haradkou_sdet
  • Помогаю с автоматизацией и нагрузкой

План

  1. История: Kibana experience
  2. Зачем нам метрики в автотестах
  3. Какие бывают метрики: Global/Local
    1. Counter
    2. Gauge
    3. Histogram
  4. Какие метрики в автотестах бывают
  5. Какие метрики в автотестах мы собираем
  6. История: prometheus remote write metrics
  7. Эволюция: OTEL метрики
  8. Заключение: С каких метрик вам можно начать

Дисклеймер: 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

Что-то что имеет периодичность во времени. Как правило это что-то с измерением времени

Внутри одного отчета гистограммы всегда передается несколько цифр:

  1. Количество (Count)

  2. Сумма (Sum)

  3. Границы корзин (Explicit Bounds)

  4. Счетчики корзин (Bucket Counts)

  5. Минимум и Максимум (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

Начните уже собирать метрики!

Made with Slides.com