Files
Deal/scripts/loadtest
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
..

Нагрузочный смоук-тест 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 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 (если установлен)

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).