Руководства12 февраля 2025 г. · 6 мин чтения

Как строить реалистичные профили нагрузки из продакшн-трафика

Воспроизводите реальное поведение пользователей вместо синтетических рампов. Пошаговое руководство по HAR-файлам и access-логам.

Автор: Команда Perfscale

Лучший нагрузочный тест — реплей того, что реально происходило в продакшне: у настоящего трафика такое распределение, которое не воспроизведёт ни один синтетический рамп.

Шаг 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-констрейнтов).