🏋️ Нагрузочное тестирование
Виды нагрузки, метрики, профили, k6 и JMeter, как читать результаты.
Шпаргалки · Тестирование · #testing #performance #load #jmeter #k6
Виды
| Вид | Цель | Профиль нагрузки |
|---|---|---|
| Нагрузочное (load) | работа при ожидаемой нагрузке | плавный рост до штатной и удержание |
| Стресс (stress) | найти предел и поведение после него | растёт до отказа |
| Пиковое (spike) | резкие всплески | скачок вверх и вниз |
| Выносливости (soak) | утечки, деградация со временем | штатная нагрузка часами |
| Объёмное (volume) | большие объёмы данных | много данных в БД |
| Масштабируемость | рост с ресурсами | ступенчатый рост |
Ключевые метрики
| Метрика | Значение |
|---|---|
| Response time (p50, p95, p99) | время ответа; смотрите процентили, а не среднее |
| Throughput / RPS | запросов в секунду |
| Error rate | доля ошибок |
| Concurrent users | одновременные пользователи |
| Latency | задержка до первого байта |
| CPU, память, диск, сеть, пул соединений | ресурсы сервера и БД |
Порядок работы
- Цели (SLA): например «p95 < 500 мс при 300 RPS, ошибок < 1%».
- Профиль нагрузки по реальной статистике (аналитика, логи).
- Подготовьте стенд, близкий к продукту, и данные.
- Напишите сценарии (логин, поиск, оформление) с параметризацией.
- Прогрев, запуск, мониторинг (Grafana, Prometheus).
- Анализ, поиск узких мест (БД, кэш, сеть, блокировки).
- Оптимизация, повторный тест, отчёт.
k6 (JavaScript)
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '1m', target: 50 },
{ duration: '3m', target: 50 },
{ duration: '30s', target: 0 },
],
thresholds: {
http_req_duration: ['p(95)<500'],
http_req_failed: ['rate<0.01'],
},
};
export default function () {
const res = http.get('https://test.k6.io');
check(res, { 'статус 200': (r) => r.status === 200 });
sleep(1);
}
Запуск: k6 run script.js.
JMeter
GUI для создания (Thread Group → HTTP Request → Listener), запуск без GUI:
jmeter -n -t plan.jmx -l result.jtl -e -o report/
Элементы: Thread Group (пользователи, ramp-up, циклы), Timer (паузы), Assertion, CSV Data Set Config (данные), Regular Expression Extractor (корреляция токенов).
Инструменты
k6, JMeter, Gatling, Locust (Python), Yandex.Tank, wrk, Apache Bench (ab -n 1000 -c 50 URL).
Ловушки
Тест на слабом стенде, одинаковые данные во всех запросах (кэш), нет прогрева, замер только среднего, генератор нагрузки сам упирается в ресурсы.