Сценарий нагрузочного тестирования описывает, какие действия и в каком объёме выполняют виртуальные пользователи, чтобы проверить поведение системы под нагрузкой.
Он строится на основе реальных пользовательских потоков и включает:
Цель теста (что проверяем).
Ключевые сценарии (какие операции выполняются).
Объём и рост нагрузки.
Метрики, которые нужно измерить.
Пример:
Цель — проверить, выдержит ли интернет-банк 5000 одновременных пользователей.
Сценарий:
60% пользователей — логин, просмотр баланса;
30% — перевод между счетами;
10% — оплата мобильной связи;
→ нагрузка растёт от 1000 до 5000 пользователей за 10 минут.
Это описание последовательности действий пользователей и параметров нагрузки,
которые воспроизводятся инструментом (например, JMeter, k6, Locust),
чтобы смоделировать реальную эксплуатацию системы.
Хороший сценарий отвечает на вопрос:
“Как поведёт себя система, если 1000 клиентов одновременно выполняют типичные операции?”
| Этап | Что делаем | Пример |
|---|---|---|
| 1. Определить цель теста | Что хотим измерить — производительность, предел, стабильность | “Проверить, выдержит ли 10 000 пользователей авторизацию без ошибок” |
| 2. Собрать статистику использования | Из логов, аналитики, метрик | 70% операций — просмотр баланса, 20% — переводы, 10% — платежи |
| 3. Определить ключевые сценарии | Описать шаги пользователя | “Авторизация → Баланс → Перевод → Выход” |
| 4. Задать параметры нагрузки | Количество пользователей, профиль роста, длительность | 1000 → 5000 пользователей, рост 500 каждые 2 мин |
| 5. Определить метрики | Что измеряем | Response Time, TPS, Error Rate, CPU, RAM |
| 6. Настроить think time и паузы | Эмулирует поведение реальных людей | Пауза 3–5 сек между действиями |
| 7. Настроить мониторинг | Метрики сервера и приложения | Grafana, Prometheus, InfluxDB |
| 8. Задать критерии успешности (SLA) | Условия, при которых система “прошла тест” | 95% запросов < 2 сек, Error Rate ≤ 1% |
Цель:
Проверить стабильность API интернет-банка при нагрузке 5000 пользователей.
Сценарий:
1000 пользователей начинают авторизацию (POST /login).
70% после входа делают GET /balance.
20% совершают POST /transfer.
10% выполняют POST /pay/mobile.
“Think time” — 2–4 сек между шагами.
Постепенное увеличение нагрузки от 1000 → 5000 пользователей (Ramp-up: 10 мин).
Длительность пикового теста — 15 мин.
Ожидаемые метрики:
Средний Response Time ≤ 2 сек.
Error Rate ≤ 1%.
CPU < 80%, RAM < 70%.
TPS = ~250–300.
Вывод:
Если при 5000 пользователей система стабильна → нагрузка допустима.
🚫 Искусственная нагрузка (все пользователи делают одно и то же).
🚫 Отсутствие “think time” → создаёт нереалистично высокий TPS.
🚫 Неправильное распределение сценариев по весам.
🚫 Неучёт “подготовительных” запросов (авторизация, токены).
🚫 Отсутствие мониторинга инфраструктуры (CPU, RAM, network).
JMeter — визуальный план с Thread Groups и HTTP Samplers.
k6 — сценарии в JS (удобно задавать ramp-up и профили нагрузки).
Locust — сценарии на Python с task weighting.
Пример в k6:
import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 1000 },
{ duration: '3m', target: 5000 },
{ duration: '5m', target: 5000 },
],
};
export default function () {
http.post('https://bank.test/api/login', { user: 'u', pass: 'p' });
http.get('https://bank.test/api/balance');
sleep(Math.random() * 3 + 2); // think time
}
| Элемент | Описание |
|---|---|
| Цель теста | Проверка стабильности API при 5000 пользователях |
| Тип нагрузки | Постепенный рост + удержание |
| Профиль пользователей | 70% баланс, 20% перевод, 10% платеж |
| Продолжительность | 25 мин (10 ramp-up + 15 hold) |
| Метрики | RT, TPS, Error Rate, CPU, RAM |
| Критерии успешности (SLA) | 95% RT < 2 сек, Error Rate ≤ 1% |
💡 Итог:
Сценарий нагрузочного тестирования = модель поведения пользователей под нагрузкой, включающая
цель, шаги, объём, профиль роста и метрики.
Он должен быть реалистичным, измеримым и воспроизводимым, чтобы дать надёжную оценку производительности.
Чтобы пожаловаться или сообщить об ошибке, войдите в аккаунт или зарегистрируйтесь.