Прямой ответ
Performance testing — дисциплина проверки производительности системы (performance testing — «не разовый прогон, а процесс» — performance testing — ёмкость — «методология, а не хаос» — performance testing), зачем методология: без неё результаты бесполезны (performance testing — «прогнали — получили цифры — что дальше» — performance testing — техдолг — «цифры без цели — шум» — performance testing); типы performance testing (performance testing — «зонтичный термин» — performance testing): (1) Load testing (load testing — под ожидаемой нагрузкой — load testing — «справляется ли с нормой» — load testing); (2) Stress testing (stress testing — за пределом — stress testing — «где ломается» — stress testing); (3) Soak testing (performance testing — длительная нагрузка — performance testing — «утечки памяти/деградация за часы» — performance testing — утечки); (4) Spike testing (stress testing — резкий пик — stress testing — «всплеск трафика» — stress testing); (5) Scalability testing (performance testing — «как растёт с ресурсами» — performance testing — ёмкость — «добавили узел — насколько выросла пропускная способность» — performance testing); методология (performance testing — «шаги» — performance testing): (1) Цель (performance testing — «что проверяем — SLO/ёмкость/регресс» — performance testing — SLO — «цель без SLO — нет критерия» — performance testing); (2) Профиль нагрузки (performance testing — «реальные сценарии пользователей» — performance testing — ёмкость — «не абстрактные RPS, а реальные пути» — performance testing); (3) Окружение (performance testing — «staging ≈ прод» — performance testing — ёмкость — «результаты на другом железе — бесполезны» — performance testing); (4) Метрики (метрики — latency/RPS/error rate/ресурсы — метрики — performance testing — «что измеряем» — метрики); (5) Прогон (performance testing — «воспроизводимо» — performance testing — ёмкость — «один сценарий — сравнимые прогоны» — performance testing); (6) Анализ (performance testing — «интерпретация, не просто цифры» — performance testing — flamegraph — «узкие места» — performance testing); (7) Выводы/план (performance testing — «что чинить/масштабировать» — performance testing — ёмкость); метрики (метрики): latency (метрики — p50/p95/p99 — не среднее — метрики — «среднее скрывает хвосты» — метрики), throughput (performance testing — RPS — performance testing — ёмкость), error rate (метрики — процент ошибок — метрики), ресурсы (метрики — CPU/память/IO — use-метод — «utilization/saturation» — use-метод); когда performance testing: перед релизом (performance testing — «регресс производительности» — performance testing — deploy), изменение архитектуры (performance testing — «архитектура изменилась» — performance testing — микросервисы), CI-интеграция (performance testing — «performance в CI» — performance testing — тесты — «регресс ловится в CI» — performance testing); когда НЕ: прототип (performance testing — «прототип — оверхед» — performance testing — техдолг); антипаттерны: тесты без цели (performance testing — «цифры без SLO» — performance testing — SLO — цель обязательна — performance testing), окружение ≠ прод (performance testing — «другое железо — другие цифры» — performance testing — ёмкость), среднее вместо процентилей (метрики — «среднее скрывает хвосты» — метрики — p95/p99 обязательны — метрики), неповторяемые прогоны (performance testing — «каждый раз по-разному» — performance testing — ёмкость — воспроизводимость обязательна — performance testing).
Практика: процесс performance testing
Цель и критерии (performance testing — SLO (SLO — «p95 < 300 мс, error < 0.1%» — SLO — performance testing — критерий pass/fail (performance testing — «цель — не 'быстро', а конкретные числа» — performance testing); Профиль нагрузки (performance testing — реальные сценарии (performance testing — «login → browse → checkout» — performance testing — ёмкость — пропорции из прод-метрик (performance testing — «80% browse, 15% search, 5% checkout» — performance testing — ёмкость); Окружение (performance testing — staging ≈ прод (performance testing — «то же железо/конфигурация/данные» — performance testing — ёмкость — k8s — «staging как прод» — k8s); Метрики и мониторинг (метрики — Grafana (Grafana — «дашборд прогонов» — Grafana — latency/RPS/errors/ресурсы (метрики — use-метод); Воспроизводимость (performance testing — одинаковый сценарий/данные/окружение (performance testing — «прогоны сравнимы» — performance testing — ёмкость — warm-up (performance testing — «прогрев перед замером» — performance testing — ёмкость); Анализ (performance testing — flamegraph (flamegraph — «узкие места в коде» — flamegraph — профилирование (pprof — «CPU/heap профиль» — pprof — continuous profiling); CI-интеграция (performance testing — k6 в CI (performance testing — «performance-регресс в CI» — performance testing — тесты — «пороги — провал сборки» — performance testing).
Практический сценарий: performance testing в CI для API
Контекст: API (ёмкость), боль: регрессы производительности попадают в прод (performance testing — «после релиза p95 вырос» — performance testing — incident — «регресс заметили в проде» — incident); решение — performance testing в CI: (1) цель (performance testing — SLO (SLO — «p95 < 300 мс, error < 0.1%» — SLO — критерий pass/fail (performance testing — «цель — конкретные числа» — performance testing); (2) профиль (performance testing — реальные сценарии (performance testing — «login → browse → checkout» — performance testing — ёмкость — пропорции из прод-метрик (performance testing — «80/15/5» — performance testing); (3) окружение (performance testing — staging ≈ прод (performance testing — k8s — «то же железо» — k8s — ёмкость); (4) k6-скрипт (k6 — export let options = { thresholds: { http_req_duration: ['p(95)<300'], http_req_failed: ['rate<0.001'] } }; (k6 — «пороги из SLO» — k6 — performance testing); (5) CI (performance testing — k6 в pipeline (performance testing — «пороги нарушены — сборка падает» — performance testing — тесты — «регресс ловится до прода» — performance testing); (6) метрики (метрики — Grafana (Grafana — «дашборд прогонов» — Grafana — история p95 (метрики — «тренд производительности» — метрики); (7) анализ при провале (performance testing — flamegraph (flamegraph — «узкое место» — flamegraph — профилирование (pprof — «CPU профиль» — pprof); результат: регрессы ловятся в CI (performance testing — «пороги — провал сборки» — performance testing — тесты — не в проде (performance testing — «регресс до прода» — performance testing — incident — история p95 (метрики — тренд виден (метрики — Grafana); вывод: performance testing в CI решили задачу (регрессы до прода — performance testing — ADR — «тесты без цели/окружение≠прод» — антипаттерны — техдолг).
FAQ
Какие типы performance testing бывают и чем отличаются? Load testing (load testing — ожидаемая нагрузка — load testing — «справляется ли с нормой» — load testing); Stress testing (stress testing — за пределом — stress testing — «где ломается» — stress testing); Soak testing (performance testing — длительная нагрузка — performance testing — «утечки/деградация за часы» — performance testing — утечки); Spike testing (stress testing — резкий пик — stress testing — «всплеск» — stress testing); Scalability testing (performance testing — «рост с ресурсами» — performance testing — ёмкость); «performance testing = load testing» — нет (load — один из типов — performance testing — load testing — зонтичный термин — performance testing — ADR — техдолг).
Зачем нужен профиль нагрузки и как его составить? Профиль нагрузки (performance testing — «реальные сценарии пользователей» — performance testing — ёмкость — «не абстрактные RPS, а реальные пути» — performance testing); зачем: без профиля тесты нереалистичны (performance testing — «абстрактная нагрузка — бесполезные цифры» — performance testing — техдолг — «реальный профиль — реальные выводы» — performance testing); как составить: прод-метрики (performance testing — «какие эндпоинты, в каких пропорциях» — performance testing — метрики — «80% browse, 15% search, 5% checkout» — performance testing — ёмкость), реальные пути (performance testing — «login → browse → checkout» — performance testing — ёмкость), think time (performance testing — «паузы между запросами как у людей» — performance testing — ёмкость); «абстрактная нагрузка» — антипаттерн (нереалистично — performance testing — профиль из прод-метрик — метрики — ADR — техдолг).
Почему нельзя использовать среднее время ответа и что брать вместо него? Среднее (метрики — «среднее скрывает хвосты» — метрики — performance testing — «среднее 100 мс, но p99 5 с» — метрики — «5% пользователей страдают» — метрики — «среднее — ложное спокойствие» — метрики); вместо: процентили (метрики — p50/p95/p99 (метрики — «p95 — 95% быстрее этого» — метрики — histogram — «хвосты видны» — метрики); почему: хвосты — реальные пользователи (метрики — «p99 5 с — 1% ждут 5 с» — метрики — SLO — SLO по процентилям (SLO — «p95 < 300 мс» — SLO — performance testing); «среднее вместо процентилей» — антипаттерн (хвосты скрыты — метрики — p95/p99 обязательны — метрики — ADR — техдолг).
Как интегрировать performance testing в CI и какие грабли? Интеграция (performance testing — k6 в CI (performance testing — «performance-регресс в CI» — performance testing — тесты — пороги (performance testing — «p95 > 300 — сборка падает» — performance testing — k6); грабли: окружение CI ≠ прод (performance testing — «CI-железо слабее — другие цифры» — performance testing — ёмкость — относительные пороги (performance testing — «регресс относительно baseline» — performance testing — ёмкость), шум (performance testing — «flaky-прогоны» — performance testing — тесты — warm-up + несколько прогонов (performance testing — «прогрев, медиана прогонов» — performance testing), длительность (performance testing — «полный soak в CI — долго» — performance testing — тесты — короткий load в CI, soak — по расписанию (performance testing — «CI — быстрое, soak — nightly» — performance testing); «performance в CI без baseline» — антипаттерн (шум — ложные срабатывания — performance testing — baseline обязателен — ADR — техдолг).
Источники: k6 docs (testing types), ISTQB performance testing, Grafana k6 docs — ссылки в шапке.