🏋️ Нагрузочное тестирование

Виды нагрузки, метрики, профили, 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, память, диск, сеть, пул соединений ресурсы сервера и БД

Порядок работы

  1. Цели (SLA): например «p95 < 500 мс при 300 RPS, ошибок < 1%».
  2. Профиль нагрузки по реальной статистике (аналитика, логи).
  3. Подготовьте стенд, близкий к продукту, и данные.
  4. Напишите сценарии (логин, поиск, оформление) с параметризацией.
  5. Прогрев, запуск, мониторинг (Grafana, Prometheus).
  6. Анализ, поиск узких мест (БД, кэш, сеть, блокировки).
  7. Оптимизация, повторный тест, отчёт.

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).

Ловушки

Тест на слабом стенде, одинаковые данные во всех запросах (кэш), нет прогрева, замер только среднего, генератор нагрузки сам упирается в ресурсы.