Решение по 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.
2.9 KiB
2.9 KiB
Нагрузочный смоук-тест API Deal (scripts/loadtest/)
Минимальный прогон «есть ли жизнь и как быстро отвечает» по читающим ручкам API (этап 12, пакет C). Внешних сервисов и записывающих операций нет — только логин и чтение, БД не мутируется.
Сценарий
POST /api/auth/login{login, password}— сессия (deal_session).- В цикле:
GET /api/containers, затемGET /api/cards. - Метрики: число запросов, ошибки (не-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).