Files
Deal/scripts/loadtest/README.md
T
Rustam Khalimov 9e07568ddd Инициализировать репозиторий «Дейл»
Первый коммит: модульный монолит ядра (.NET 10) и gRPC-сервисы
ai/ml/telegram, фронтенд Vue 3/Vite/Tailwind, документация (ТЗ,
инструкция пользователя, техдокументация, код-стайл), бэклог,
скрипты развёртывания и архив прототипа LeadRadar.
2026-09-11 02:50:17 +03:00

3.0 KiB
Raw Blame History

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