Лучший нагрузочный тест — реплей того, что реально происходило в продакшне: у настоящего трафика такое распределение, которое не воспроизведёт ни один синтетический рамп.
Шаг 1: снимите HAR-файл
HAR (HTTP Archive) записывает каждый запрос браузера за сессию. Большинство браузеров экспортируют его из DevTools → Network → правый клик → «Save as HAR».
Для API-трафика используйте access-логи nginx или вашего балансировщика.
Шаг 2: конвертируйте в k6-скрипт
В проекте k6 есть конвертер HAR:
npx @k6/har-to-k6 recording.har -o load-test.js
Он генерирует скрипт со всеми запросами, заголовками и временными корреляциями. Пройдитесь по нему, чтобы:
- Параметризовать auth-токены и session ID
- Заменить захардкоженные ID динамическими
- Убрать запросы статики (картинки, шрифты)
Шаг 3: смоделируйте форму трафика
Посмотрите на свой реальный трафик за сутки:
00:00–06:00 — 10% пикового RPS
06:00–09:00 — рост с 10% до 60%
09:00–18:00 — 80–100% пика
18:00–22:00 — спад с 80% до 30%
22:00–00:00 — 15% пика
В k6 это моделируется через stages:
export const options = {
stages: [
{ duration: '2m', target: 10 }, // morning ramp
{ duration: '5m', target: 80 }, // business hours
{ duration: '2m', target: 30 }, // evening decline
{ duration: '1m', target: 0 }, // cool-down
],
};
Шаг 4: сверьте с baseline
Построив реалистичный профиль, прогоните его и сравните:
- RPS совпадает с продакшн-пиком?
- Распределение по эндпоинтам выглядит правильно?
- Доля ошибок в ожидаемых пределах?
Если тест показывает больше ошибок, чем продакшн, — скорее всего, проблема изоляции данных (тестовые данные закончились, нарушения unique-констрейнтов).