food-market/tests/load
nns b52cfc0f79
Some checks failed
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Has been cancelled
CI / Web (React + Vite) (push) Has been cancelled
CI / POS (WPF, Windows) (push) Has been cancelled
docs(s27): финальные результаты 4h-soak — 718k iter, 0 mem leak
Реальный 4-часовой soak (Sprint 28 overnight): 03:15 → 07:15.

  iterations:    718482 @ 49.89/s (target 50)
  api_mem:       250-300 MiB, без линейного роста ✓
  pg_conn:       18-19 steady, no exhaust ✓
  p95 latency:   me=269ms / products=327ms / stats=328ms (steady)
  http_req_failed: 24.8% — НЕ из-за API.

Внешний TLS-терминатор 88.204.171.93 (между dev-vm и stage) перодически
ронял соединения с 'unexpected EOF' / 'connection reset by peer'. На
внутренней сети stage'а (`docker exec curl localhost:8085`) — Healthy
всё время. ISP/Cloudflare-level ограничение на длительные RPS, не баг
food-market.

Артефакты:
  tests/load/soak-runs/2026-06-09/summary.json
  tests/load/soak-runs/2026-06-09/metrics.csv

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 07:25:06 +05:00
..
soak-runs/2026-06-09 docs(s27): финальные результаты 4h-soak — 718k iter, 0 mem leak 2026-06-09 07:25:06 +05:00
monitor-soak.sh feat(s27): cross-feature integration + soak + crash recovery (8/8 ✓) 2026-06-09 03:09:17 +05:00
README.md docs(s12): ARCHITECTURE/MULTI-TENANCY/RUNBOOK/DEVELOPER-GUIDE + k6 baseline + stage-verify CI 2026-06-07 03:19:25 +05:00
retail-sales-parallel.js docs(s12): ARCHITECTURE/MULTI-TENANCY/RUNBOOK/DEVELOPER-GUIDE + k6 baseline + stage-verify CI 2026-06-07 03:19:25 +05:00
sales-report-heavy.js docs(s12): ARCHITECTURE/MULTI-TENANCY/RUNBOOK/DEVELOPER-GUIDE + k6 baseline + stage-verify CI 2026-06-07 03:19:25 +05:00
signup-burst.js docs(s12): ARCHITECTURE/MULTI-TENANCY/RUNBOOK/DEVELOPER-GUIDE + k6 baseline + stage-verify CI 2026-06-07 03:19:25 +05:00
soak-4h.js feat(s27): cross-feature integration + soak + crash recovery (8/8 ✓) 2026-06-09 03:09:17 +05:00

k6 нагрузочные тесты

Сценарии нагрузочного тестирования API food-market через k6.

Подготовка

# k6 standalone (Linux)
wget -O- https://github.com/grafana/k6/releases/download/v0.55.0/k6-v0.55.0-linux-amd64.tar.gz | tar xz
mv k6-*-linux-amd64/k6 ~/bin/

# проверить
k6 version

Сценарии

Файл Что меряет
signup-burst.js 100 signup'ов за минуту — bootstrap новых tenant'ов под нагрузкой
retail-sales-parallel.js 1000 проведённых чеков параллельно за 5 минут (один tenant)
sales-report-heavy.js Чтение отчёта /api/reports/sales при 10 000 уже-существующих продажах

Запуск против stage

BASE_URL=https://test.admin.food-market.kz \
    k6 run signup-burst.js

BASE_URL=https://test.admin.food-market.kz \
    k6 run retail-sales-parallel.js

BASE_URL=https://test.admin.food-market.kz \
    k6 run sales-report-heavy.js

Результаты сводятся в docs/performance-baseline.md.

Что k6 печатает

checks_total....: 100.00% 1000/1000
http_req_duration: p(50)=82ms  p(95)=312ms  p(99)=580ms
http_req_failed.: 0.00%   0/1000
iteration_duration: avg=512ms

Это «человеческие» метрики. Тонкое — через --out json=summary.json или --out csv=... (k6 не имеет своего хранилища, только stdout/file).