k6: нагрузочное тестирование как система
16 / 1794%
Продвинутые паттерны и чек-лист внедрения
20 минут
Паттерны, которые спасают
- Тестовые данные как код: фикстуры/генераторы в Git, уникальные префиксы сущностей, cleanup jobs и снапшоты БД до/после теста.
- Стратегия падающего теста: при фейле threshold — сохрани summary/raw, сделай
dumpлогов/трейсов, отправь ссылку в #perf и стопни дальнейшие стадии (auto-stop). - Канарейка в проде: ограниченный RPS, белые IP, выключенные платежи/уведомления, флаги
X-Load-Test: true, отдельные метки в логах для быстрого фильтра. - Разделение сценариев: разные executors на read/write/admin, чтобы видеть узкие места отдельно, а не усреднять.
- Baseline как артефакт: храните в S3/Minio с тегами
release,env, сравнивайте диффами автоматически. - A/B под нагрузкой: гоняйте версии API v1/v2 с тегами
version, сравнивайте p95/error rate и бизнес-метрики в одном тесте, решение — какую версию выкатывать. - Дорожная карта внедрения: 1 месяц — smoke на PR + baseline; 3 месяца — регулярные load/stress и diff; 6 месяцев — operator/Cloud для больших тестов, канарейки в проде.
Быстрый чек-лист
- Стенд готов: версии зафиксированы, сторонние интеграции либо sandbox, либо выключены.
- Сценарии отражают реальные journeys (микс > 2–3 потоков, think time установлен).
- Thresholds совпадают с SLO и описан критерий Go/No-Go.
- Мониторинг генератора: CPU/RAM/Net,
dropped_iterations. - Экспорт результатов подключен (summary.json + Grafana/Prometheus), ссылка на дашборд известна команде.
- Ответственный за решение по итогам теста назначен.
- Для продовых тестов: sandbox или отключенные интеграции (платежи/рассылки), белые IP и токены с ограниченными scope.
- Тестовые данные изолированы: уникальные id, cleanup после теста, фикстуры или снапшоты БД обновлены.
Готовые шаблоны (готовые фразы)
- 80% случаев покрывают executors:
ramping-vusдля рост/плато/спад,constant-arrival-rateдля фиксированного rps. - Think time:
sleep(1 + Math.random())для browse,sleep(2-3)для checkout. - Thresholds:
http_req_duration: ["p(95)<X", "p(99)<Y"],http_req_failed: ["rate<0.01"],checks{flow:...}: ["rate>0.97"]. - Отчет: «p95 +12% к baseline, error rate 0.3%, bottleneck — БД (latency), генератор здоров. Решение: задачка на оптимизацию, релиз по решению владельца».
Что дальше
- Автоматизируйте обновление baseline: сохраняйте summary и дашборд-линки в артефакты каждого теста.
- Держите набор сценариев как код (Git): smoke/load/stress/spike/soak. Обновляйте вместе с продуктом.
- Продавайте бизнесу: показывайте, как найденные bottleneck экономят деньги и удерживают SLA.
- Добавьте «lesson learned» в Confluence/Notion для каждого инцидента: какой тест поймал, где bottleneck, сколько денег/времени сэкономили.
- Ведите каталог паттернов: что сработало в прошлых инцидентах, ссылки на тесты/дашборды/diff, чтобы не изобретать заново.
✅ Чек-лист завершения урока
После этого урока вы должны уметь:
Продвинутые паттерны:
- Управлять тестовыми данными: фикстуры в Git, уникальные ID, cleanup jobs
- Настроить стратегию падающего теста: auto-stop, dump логов/трейсов, уведомления
- Запускать канарейки в проде: feature flags, белые IP, отдельные метки
Чек-листы:
- Использовать чек-лист перед запуском теста (стенд, данные, мониторинг)
- Использовать чек-лист перед релизом (thresholds, baseline, Go/No-Go)
- Разделять сценарии по типам: read/write/admin для лучшей диагностики
Baseline и артефакты:
- Хранить baseline в S3/Minio с тегами release/env
- Автоматически сравнивать с baseline в CI/CD
- Держать ссылки на дашборд/логи/трейсы в отчетах
Дорожная карта:
- Понимать этапы внедрения: 1 месяц (smoke+baseline), 3 месяца (load+diff), 6 месяцев (operator+канарейки)
- Вести каталог паттернов: что сработало, ссылки на тесты
- Документировать lesson learned после каждого инцидента
Практическое задание:
- Создайте чек-лист для запуска тестов в вашей команде
- Определите критерии Go/No-Go для релизов
- Составьте дорожную карту внедрения k6 на ближайшие 3-6 месяцев
Если чек-лист пройден — переходите к уроку 17 (финальный проект): примените все знания для внедрения k6 в реальный проект!