Решение по TD-STYLE-ANALYZERS: LF — инструменты проекта (Python/Node) пишут LF, CRLF-.sh не работают на Linux CI (sh scripts/ci.sh), большинство файлов уже были LF. Добавлен .gitattributes (* text=auto eol=lf, бинарные исключения), .editorconfig переведён на lf, 1029 файлов конвертированы, git add --renormalize. Из индекса убраны закравшиеся archive/**/__pycache__/*.pyc.
55 lines
2.9 KiB
Markdown
55 lines
2.9 KiB
Markdown
# Нагрузочный смоук-тест 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).
|