Содержание
Нагрузочное тестирование показывает, сколько пользователей выдержит сайт, как растёт время ответа под нагрузкой и что сломается первым. Его проводят перед распродажами, рекламными кампаниями и запусками, а также после крупных изменений архитектуры. Без такого теста о пределе системы обычно узнают в самый неудачный момент — когда пришли покупатели.
Разберём, какие бывают тесты, как составить реалистичный сценарий, какие метрики смотреть и что делать с результатами.
Какие бывают виды нагрузочных тестов?
Нагрузочные тесты различаются формой нагрузки и вопросом, на который они отвечают. Обычно проводят несколько видов: проверку ожидаемой нагрузки, поиск предела, проверку резких всплесков и длительную работу.
| Вид теста | Вопрос | Как проводят |
|---|---|---|
| Нагрузочный | Выдержит ли система ожидаемый пик | Плавно выходят на целевую нагрузку и держат её |
| Стрессовый | Где предел и как система ломается | Наращивают нагрузку до отказа |
| Пиковый (spike) | Переживёт ли система резкий всплеск | Мгновенно увеличивают нагрузку в разы |
| Длительный (soak) | Нет ли утечек памяти и деградации | Держат среднюю нагрузку часами |
Как составить реалистичный сценарий?
Реалистичный сценарий повторяет поведение настоящих пользователей: они не открывают одну страницу тысячи раз, а смотрят каталог, ищут, кладут товар в корзину и иногда оформляют заказ. Пропорции действий берут из аналитики, а целевую нагрузку — из прошлых пиков с запасом.
Шаги подготовки:
- Выберите 3–5 ключевых пользовательских сценариев: просмотр каталога, поиск, корзина, оформление заказа, вход.
- Возьмите из аналитики долю каждого сценария и паузы между действиями.
- Определите цель: например, 500 одновременных пользователей и время ответа p95 меньше 500 мс.
- Подготовьте тестовые данные: пользователей, товары, промокоды.
- Отключите реальные платежи, SMS и письма — замените их заглушками.
import http from 'k6/http'
import { sleep, check } from 'k6'
export const options = {
stages: [
{ duration: '5m', target: 500 },
{ duration: '15m', target: 500 },
{ duration: '2m', target: 0 },
],
thresholds: { http_req_duration: ['p(95)<500'], http_req_failed: ['rate<0.01'] },
}
export default function () {
const res = http.get('https://staging.example.com/api/products?page=1')
check(res, { 'status 200': (r) => r.status === 200 })
sleep(Math.random() * 3 + 1)
}
Фото: Unsplash
Какие метрики смотреть во время теста?
Во время теста смотрят метрики с двух сторон: что видит пользователь — время ответа и долю ошибок, — и что происходит внутри — загрузку процессора, памяти, базы данных и очередей. Только вместе они показывают, где узкое место.
- время ответа в перцентилях p95 и p99, а не среднее;
- доля ошибок и их типы: таймауты, 500, отказ в соединении;
- пропускная способность — сколько запросов в секунду система реально обрабатывает;
- ресурсы — процессор, память, диск, сеть каждого сервера;
- база данных — медленные запросы, блокировки, количество соединений;
- очереди — растёт ли количество задач в ожидании.
Как настроить сбор этих данных, мы разбирали в статье мониторинг и логирование.
Где обычно находится узкое место?
Чаще всего узкое место — база данных: медленные запросы без индексов, запросы в цикле и нехватка соединений. Следом идут внешние сервисы, которые отвечают медленно, и отсутствие кеша для часто запрашиваемых данных.
Типичные находки:
- запрос без индекса, который незаметен на тестовых данных и тормозит на реальных;
- десятки запросов к базе на одну страницу вместо одного;
- синхронные вызовы внешних API прямо в запросе пользователя;
- нет кеша для каталога и главной страницы;
- лимит соединений с базой или процессов приложения меньше, чем нужно.
Как с этим работать — в статьях индексы в PostgreSQL, кеширование в веб-приложении и очереди задач.
Что делать с результатами теста?
По результатам теста составляют список узких мест в порядке влияния, исправляют самое серьёзное и повторяют тест. Обычно двух-трёх итераций хватает, чтобы поднять предел системы в несколько раз без покупки нового оборудования.
- зафиксируйте базовые цифры, чтобы сравнивать следующие тесты;
- исправляйте по одному узкому месту и перепроверяйте;
- запишите предел системы и план действий при его приближении;
- добавьте короткий базовый тест в CI для отслеживания деградации.
Коротко
- Нагрузочный тест показывает предел системы и что сломается первым.
- Виды тестов: нагрузочный, стрессовый, пиковый и длительный.
- Сценарий повторяет поведение реальных пользователей с пропорциями из аналитики.
- Смотрите перцентили времени ответа, ошибки и ресурсы, особенно базу данных.
- Исправляйте узкие места по одному и повторяйте тест.
Частые вопросы
Можно ли проводить нагрузочное тестирование на продакшене?
Лучше на отдельном окружении, похожем на продакшен. Если тестировать на боевой системе, то в ночное время, с ограниченной нагрузкой, без реальных платежей и писем и с готовностью быстро остановить тест.
Как часто нужно проводить нагрузочные тесты?
Перед ожидаемыми пиками — распродажами, рекламой, запуском — и после крупных изменений архитектуры. Короткий базовый тест можно запускать в CI регулярно, чтобы ловить деградацию производительности.
Сколько стоит нагрузочное тестирование?
Сами инструменты часто бесплатны. Основные затраты — подготовка сценариев и тестового окружения и анализ результатов: обычно от нескольких дней до пары недель работы инженера.



