# Нагрузочный смоук-тест API Deal (`scripts/loadtest/`) Минимальный прогон «есть ли жизнь и как быстро отвечает» по читающим ручкам API (этап 12, пакет C). Внешних сервисов и записывающих операций нет — только логин и чтение, БД не мутируется. ## Сценарий 1. `POST /api/auth/login` `{login, password}` — сессия (`deal_session`). 2. В цикле: `GET /api/containers`, затем `GET /api/cards`. 3. Метрики: число запросов, ошибки (не-200), RPS, средняя/p95/max латентность. Учётные данные по умолчанию — `admin` / `admin` (dev-дефолт bootstrap тенанта). ## Вариант A — bash + curl (зависимостей нет, кроме curl) ```bash bash scripts/loadtest/api-loadtest.sh # пример с параметрами BASE_URL=http://localhost:5080 LOGIN=admin PASSWORD=admin \ DURATION_SECONDS=20 PAUSE_SECONDS=0.1 \ bash scripts/loadtest/api-loadtest.sh ``` Переменные окружения: `BASE_URL` (по умолчанию `http://localhost:5080`), `LOGIN`/`PASSWORD`, `DURATION_SECONDS` (15), `PAUSE_SECONDS` (0.2), `CURL_TIMEOUT` (5). Код возврата: `0` — без ошибок, `1` — ошибка логина/конфигурации, `2` — были не-200. ## Вариант B — k6 (если установлен) ```bash k6 run scripts/loadtest/deal-loadtest.js BASE_URL=http://localhost:5080 VUS=10 DURATION=30s \ k6 run scripts/loadtest/deal-loadtest.js ``` Скрипт логинится один раз в `setup()` и раздаёт куку виртуальным пользователям; пороги проваливают прогон при доле ошибок > 1% или p95 > 500 мс. ## Как поднять API для прогона - **dev (полный стек)**: `docker compose -f deploy/compose.dev.yml up -d --build`, затем прогон против `http://localhost:5080`; после — `docker compose -f deploy/compose.dev.yml down`. - **dev (только core + Postgres)**: см. техдок §13 «Быстрый старт» (Postgres :5433, API :5080). - Прогон короткий (по умолчанию 15–20 с) — это смоук, а не полноценный бенчмарк. ## Замечания - В PROD включён rate-limit (`api` — 600/мин на тенанта, `auth` — 10/мин на IP), поэтому длительные прогоны делайте на dev-стенде или поднимите лимит. - Метрики перфа сервисов дополнительно смотрите в Prometheus/Grafana (профиль `observability`): `http_server_request_duration_seconds_*`, RPS/p95 на дашборде `Deal-Metrics-Overview` (см. техдок §7).