# Базовый нагрузочный тест (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 с информацией о пользователе. ## Файл теста - [loadtest-endpoints.js](../frontend/scripts/loadtest-endpoints.js) ## Предусловия перед запуском 1. Запущен API (локально или на тестовом стенде). 2. Если endpoint'ы требуют авторизацию — есть валидный JWT токен. 3. Установлен k6. ## Запуск Без параметров (локальный API по умолчанию `http://localhost:5019`): ```bash k6 run ./frontend/scripts/loadtest-endpoints.js ``` С параметрами окружения: ```bash export TOKEN="" 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.»