Нагрузочные тесты
Материалы в энциклопедии (раздел 7 — тестирование)
Перед лабораторной имеет смысл прочитать теорию и смежные темы — так метрики и шаги эксперимента будут на своих местах.
| Задача | Статья |
|---|---|
| Маршрут по всему разделу | Тестирование — о разделе |
| Типы нагрузочного и стресс-теста, RPS, latency, SLO | Нагрузочное и стресс-тестирование |
| Практика: сценарии, точка насыщения, отчёт | Проверка надежности под нагрузкой |
| Нагрузка среди видов тестирования | Основы тестирования · Классификация видов |
| Где baseline в процессе QA | Жизненный цикл тестирования |
| Автоматизация прогонов и CI | Автоматизация тестирования |
| Оформление результатов | Документация тестировщика |
Рекомендуемый порядок: 122 → 1014 → эта лабораторная.
Зачем нужна эта лабораторная
Нагрузочное тестирование показывает, как система ведет себя при росте числа пользователей и запросов. Это способ заранее найти пределы производительности, а не ждать, пока сервис "ляжет" в продакшене.
В этой лабораторной вы пройдете полный цикл:
- Подготовите стенд и выберете реалистичный сценарий.
- Проведете базовый прогон.
- Постепенно увеличите нагрузку.
- Снимете метрики и сделаете выводы.
- Сформулируете план улучшений.
Базовые понятия
- RPS (Requests Per Second) — сколько запросов в секунду обрабатывает сервис.
- Latency (задержка) — время ответа сервера. Важно смотреть не только среднее, но и
p95/p99. - Error rate — доля запросов с ошибкой (
4xx,5xx, таймауты). - Throughput — объем обработанных данных или операций за единицу времени.
- Saturation — степень "забитости" ресурсов (CPU, RAM, диск, сеть, пул соединений).
Ключевая идея: "среднее время ответа 100 мс" ничего не гарантирует, если p99 уже 5 секунд. Подробнее о метриках и различии нагрузочного и стресс-теста — в статье про нагрузочное тестирование.
Подготовка стенда
1) Выберите инструмент
Для старта удобно использовать k6:
- простой JS-сценарий,
- понятные отчеты,
- удобно запускать локально и в CI.
2) Зафиксируйте условия
Чтобы результаты были сравнимыми:
- тестируйте один и тот же билд;
- выключите лишние фоновые процессы;
- используйте стабильное окружение (один и тот же хост/контейнер);
- запишите конфигурацию сервиса (лимиты CPU/RAM, БД, кэш).
3) Определите SLO
Пример SLO для API:
p95 < 300ms,error_rate < 1%,- минимум
400 RPSна целевом эндпоинте.
Без SLO нельзя понять, тест пройден или нет. Как формулировать цели и пороги — см. нагрузочное и стресс-тестирование.
Пошаговый эксперимент
Шаг 1. Выберите критичный сценарий
Не тестируйте "абстрактный ping". Берите пользовательский путь, например:
- авторизация,
- поиск,
- оформление заказа,
- создание заявки.
Шаг 2. Сделайте smoke-прогон
Цель — проверить, что тест вообще корректный (см. также проверку надёжности под нагрузкой):
- 1-5 виртуальных пользователей,
- короткая длительность (30-60 секунд),
- валидация кодов ответа и структуры ответа.
Шаг 3. Запустите baseline
Запустите умеренную нагрузку, которую система должна выдерживать "всегда" — это эталон для сравнения с ramp-up и стресс-тестом. Baseline обычно фиксируют после smoke и до роста нагрузки; место этого шага в общем процессе QA — в жизненном цикле тестирования.
Снимите:
p50/p95/p99,- RPS,
- error rate,
- CPU/RAM сервера,
- время ответов БД.
Шаг 4. Сделайте ramp-up
Плавно увеличивайте нагрузку, например:
- 50 пользователей -> 100 -> 200 -> 400,
- каждый этап по 3-5 минут,
- пауза 1-2 минуты между этапами для фиксации состояния.
Задача — найти момент деградации, где:
- резко растет
p95/p99, - увеличивается число ошибок,
- один из ресурсов выходит на потолок.
Шаг 5. Проведите стресс-тест
Нагрузите систему выше целевых значений (отличие от нагрузочного теста — в энциклопедии), чтобы увидеть:
- как именно она ломается;
- насколько быстро восстанавливается;
- нет ли "утечек" после перегрузки.
Шаг 6. Повторите тест после оптимизации
Любая гипотеза (индекс в БД, пул соединений, кэш, асинхронная обработка) подтверждается только повторным прогоном по тем же условиям.
Минимальный пример k6
Как интерпретировать результаты
Смотрите на связку "нагрузка -> узкое место":
- высокий CPU + рост latency: возможно, неэффективная бизнес-логика;
- нормальный CPU, но высокий latency БД: вероятны медленные запросы/индексы;
- всплеск
5xxпри росте RPS: проблемы с таймаутами, пулом подключений или очередями; - резкий рост
p99, при нормальном среднем: "длинный хвост" из-за блокировок или редких тяжелых операций.
Типичные ошибки
- Тест "не тех" эндпоинтов (не отражает реальное поведение пользователей).
- Нет прогрева приложения перед замером.
- Сравнение прогонов в разных условиях.
- Анализ только среднего времени ответа.
- Отсутствие серверных метрик (видно симптом, но не причину).
Что добавить в отчет
- Цели и SLO.
- Описание сценария и профиля нагрузки.
- Конфигурацию окружения.
- Таблицу метрик по этапам.
- Найденные узкие места.
- Подтвержденный эффект после оптимизаций.
Хороший отчет позволяет другому инженеру повторить эксперимент и получить сопоставимый результат. Шаблоны артефактов QA — в документации тестировщика.
Чтобы встроить прогоны в pipeline, см. автоматизацию тестирования.