Files
UniVerse/docs/load-testing-k6.md
serega404 cb80b35ba6
Frontend CI / build-and-check (push) Failing after 19s
🚀 Create and publish a Docker image / Detect changes in backend and frontend (push) Successful in 8s
🚀 Create and publish a Docker image / Build & publish backend image (push) Successful in 10s
🚀 Create and publish a Docker image / Build & publish frontend image (push) Successful in 25s
🚀 Create and publish a Docker image / Update stack on Portainer (push) Successful in 2s
docs: добавил k6 тестирование
2026-05-28 17:54:26 +03:00

3.8 KiB
Raw Permalink Blame History

Базовый нагрузочный тест (k6) для 3 крупных GET endpoint'ов

Цель теста

Проверить, что при небольшой параллельной нагрузке API:

  • отвечает без ошибок;
  • сохраняет приемлемую задержку на «тяжелых» чтениях;
  • не падает на endpoint пользовательской статистики.

Тест рассчитан на новичка: один скрипт, простые пороги, быстрый запуск.

Какие endpoint используются

В тест включены:

  1. GET /api/v1/courses — крупный список данных.
  2. GET /api/v1/lectures — крупный список данных.
  3. GET /api/v1/users/me/stats — endpoint с информацией о пользователе.

Файл теста

Предусловия перед запуском

  1. Запущен API (локально или на тестовом стенде).
  2. Если endpoint'ы требуют авторизацию — есть валидный JWT токен.
  3. Установлен k6.

Запуск

Без параметров (локальный API по умолчанию http://localhost:5019):

k6 run ./frontend/scripts/loadtest-endpoints.js

С параметрами окружения:

export TOKEN="<jwt>"
BASE_URL="http://localhost:5019" VUS=15 DURATION="2m" PAUSE_SECONDS=0 k6 run ./frontend/scripts/loadtest-endpoints.js

Что именно делает тест

Скрипт запускает 3 параллельных сценария:

  • courses_list
  • lectures_list
  • user_stats

Параметры каждого сценария:

  • executor: constant-vus
  • нагрузка: 10 VU
  • длительность: 2m
  • пауза между итерациями: sleep(0.5)

Итого базовый запуск создает до 30 VU одновременно: по 10 VU на каждый из 3 сценариев.

Переменные окружения:

  • VUS — количество VU на каждый сценарий, по умолчанию 10.
  • DURATION — длительность каждого сценария, по умолчанию 2m.
  • PAUSE_SECONDS — пауза между итерациями, по умолчанию 0.5.

На каждом запросе проверяется:

  • статус ответа 200;
  • тело ответа не пустое.

Пороговые значения (pass/fail)

  • http_req_failed: rate < 0.01 — ошибок менее 1%.
  • http_req_duration: p(95) < 1500 — 95% запросов быстрее 1.5с.
  • checks: rate > 0.95 — минимум 95% проверок успешны.

Если любой threshold не выполнен, k6 завершит запуск как failed.

Как интерпретировать результат

После прогона посмотрите в summary:

  1. http_req_failed — если выше 1%, есть проблема со стабильностью.
  2. http_req_duration p(95) — если выше 1500ms, есть деградация по задержке.
  3. checks — если ниже 95%, часть ответов не прошла базовую валидацию.

Минимальный формальный вывод для отчета:

  • «Проведен базовый нагрузочный прогон k6 (3 endpoint'а, 10 VU на сценарий, 5 минут).»
  • «Критерии: ошибки < 1%, p95 < 1500ms, checks > 95%.»
  • «Статус: пройдено / не пройдено по итогам summary.»