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
3.8 KiB
3.8 KiB
Базовый нагрузочный тест (k6) для 3 крупных GET endpoint'ов
Цель теста
Проверить, что при небольшой параллельной нагрузке API:
- отвечает без ошибок;
- сохраняет приемлемую задержку на «тяжелых» чтениях;
- не падает на endpoint пользовательской статистики.
Тест рассчитан на новичка: один скрипт, простые пороги, быстрый запуск.
Какие endpoint используются
В тест включены:
GET /api/v1/courses— крупный список данных.GET /api/v1/lectures— крупный список данных.GET /api/v1/users/me/stats— endpoint с информацией о пользователе.
Файл теста
Предусловия перед запуском
- Запущен API (локально или на тестовом стенде).
- Если endpoint'ы требуют авторизацию — есть валидный JWT токен.
- Установлен 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_listlectures_listuser_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:
http_req_failed— если выше 1%, есть проблема со стабильностью.http_req_duration p(95)— если выше 1500ms, есть деградация по задержке.checks— если ниже 95%, часть ответов не прошла базовую валидацию.
Минимальный формальный вывод для отчета:
- «Проведен базовый нагрузочный прогон k6 (3 endpoint'а, 10 VU на сценарий, 5 минут).»
- «Критерии: ошибки < 1%, p95 < 1500ms, checks > 95%.»
- «Статус: пройдено / не пройдено по итогам summary.»