Files
UniVerse/docs/k6-report-2026-05-28.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

121 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Отчет по нагрузочному тестированию k6
Дата отчета: 2026-05-28
## Объект тестирования
- Стенд: `https://universe.zetcraft.ru`
- Скрипт: [`frontend/scripts/loadtest-endpoints.js`](../frontend/scripts/loadtest-endpoints.js)
- Endpoint'ы:
- `GET /api/v1/courses`
- `GET /api/v1/lectures`
- `GET /api/v1/users/me/stats`
## Профиль нагрузки
Тест запускался в 3 параллельных сценариях:
- `courses_list`
- `lectures_list`
- `user_stats`
Для каждого сценария использовалось `30 VU`, итого максимум `90 VU`.
Длительность активной нагрузки каждого сценария: `15s`.
С учетом `gracefulStop` максимальная длительность выполнения составила `45s`.
## Оборудование и сеть
Тест запускался с машины со следующей конфигурацией:
- CPU: AMD Ryzen 7 8845HS, `10` потоков использовалось для нагрузки.
- RAM: DDR5 5600, `10 GB` доступно.
- Накопитель: NVMe SSD.
- Сеть: `1 Gbit/s`.
## Критерии прохождения
- `checks: rate > 0.95`
- `http_req_duration: p(95) < 1500ms`
- `http_req_failed: rate < 0.01`
## Прогон 1: без паузы между итерациями
Команда запуска:
```bash
BASE_URL="https://universe.zetcraft.ru" VUS=30 DURATION="15s" PAUSE_SECONDS=0 k6 run ./frontend/scripts/loadtest-endpoints.js
```
### Итоги
| Метрика | Значение |
| --- | ---: |
| Статус threshold'ов | пройдено |
| Успешность checks | 100.00% |
| Ошибки HTTP | 0.00% |
| Всего HTTP-запросов | 3508 |
| RPS | 77.95 req/s |
| `http_req_duration` avg | 769.41ms |
| `http_req_duration` med | 38.67ms |
| `http_req_duration` p(90) | 66.61ms |
| `http_req_duration` p(95) | 93.63ms |
| `http_req_duration` max | 36.14s |
| Всего итераций | 3508 |
| Прерванные итерации | 19 |
| Получено данных | 47 MB |
| Отправлено данных | 2.1 MB |
Проверки:
- `status is 200`: успешно.
- `body is not empty`: успешно.
## Прогон 2: пауза 1 секунда между итерациями
Команда запуска:
```bash
BASE_URL="https://universe.zetcraft.ru" VUS=30 DURATION="15s" PAUSE_SECONDS=1 k6 run ./frontend/scripts/loadtest-endpoints.js
```
### Итоги
| Метрика | Значение |
| --- | ---: |
| Статус threshold'ов | пройдено |
| Успешность checks | 100.00% |
| Ошибки HTTP | 0.00% |
| Всего HTTP-запросов | 895 |
| RPS | 19.89 req/s |
| `http_req_duration` avg | 336.11ms |
| `http_req_duration` med | 11.77ms |
| `http_req_duration` p(90) | 32.01ms |
| `http_req_duration` p(95) | 42.19ms |
| `http_req_duration` max | 35.9s |
| Всего итераций | 895 |
| Прерванные итерации | 43 |
| Получено данных | 12 MB |
| Отправлено данных | 675 kB |
Проверки:
- `status is 200`: успешно.
- `body is not empty`: успешно.
## Сравнение прогонов
| Параметр | Без паузы | Пауза 1s |
| --- | ---: | ---: |
| HTTP-запросов | 3508 | 895 |
| RPS | 77.95 req/s | 19.89 req/s |
| Ошибки HTTP | 0.00% | 0.00% |
| Checks | 100.00% | 100.00% |
| p(95) | 93.63ms | 42.19ms |
| Максимальная задержка | 36.14s | 35.9s |
## Вывод
Оба прогона успешно прошли заданные threshold'ы: ошибок HTTP не зафиксировано, все проверки ответов успешны, `p(95)` существенно ниже порога `1500ms`.
При запуске без паузы стенд обработал около `77.95 req/s`, при паузе `1s` - около `19.89 req/s`. Во всех прогонах наблюдались единичные длинные запросы до `35-36s`, при этом они не повлияли на прохождение p95-порога. Это стоит учитывать при дальнейшем анализе хвостовых задержек.