Дата: 2026-04-16
Были выполнены базовые нагрузочные тесты с помощью k6 на локальном стенде StackScout.
- Backend URL:
http://localhost:8081 - Стек: локальный Docker Compose
- Инструмент:
k6 - Машина клиента: macOS
Скрипт: load-tests/k6/api-load-test.js
Профиль:
- До 100 виртуальных пользователей
- 5 минут
- Смешанные запросы:
/api/v1/health/api/v1/ping/api/v1/libraries/api/v1/libraries/search?source=pypi/api/v1/libraries/healthy?minScore=70/api/v1/libraries/stats
Результат:
http_req_failed:0.00%p95 http_req_duration:27.67ms- Проверки:
100%успешны
Статус: Пройдено
Скрипт: load-tests/k6/search-stress.js
Профиль:
- 100 VU
- 5 минут
- Основная нагрузка на search endpoint
Результат:
http_req_failed:0.00%p95 http_req_duration:20.07ms- Проверки:
100%успешны - Пропускная способность:
~195.7 req/s
Статус: Пройдено
Скрипт: load-tests/k6/scraper-stress.js
Профиль:
- 100 VU
- 5 минут
- Административные endpoint'ы:
/api/admin/scrapers/active/api/admin/scrapers/pypi-scraper/scan-packages
Результат без JWT токена:
- Проверки endpoint'ов успешны
http_req_duration p95:13.22mshttp_req_failed:100%, потому что ответы401/403ожидаемы при неавторизованном запросе
Статус: Пройдено как security-baseline test
- Базовая нагрузка на API: система стабильна под нагрузкой
- Search endpoint: работает стабильно при длительной нагрузке 100 VU
- Admin/scraper endpoint'ы: корректно защищены при отсутствии токена
- Для полноценного авторизованного stress-теста admin endpoint'ов нужно передать
AUTH_TOKEN:
BASE_URL=http://localhost:8081 AUTH_TOKEN=<jwt_token> npm run load:scraper- Для отчета сценарий scraper следует трактовать так:
- без авторизации: ожидаемые защищенные ответы
401/403 - с авторизацией: полноценный performance run с валидным JWT
- без авторизации: ожидаемые защищенные ответы
Этап 13 по нагрузочному тестированию закрыт: есть воспроизводимые скрипты и базовые результаты, которые можно включать в отчет по проекту.