Files
Deal/scripts/loadtest/README.md
T
Rustam Khalimov 713d554dc2 Нормализовать переводы строк в LF
Решение по 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.
2026-09-11 19:01:42 +03:00

55 lines
2.9 KiB
Markdown
Raw 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.
# Нагрузочный смоук-тест 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).