Ответ
Стресс-тестирование (Stress Testing) — это вид тестирования производительности, при котором система подвергается нагрузке, превышающей ее расчетные пиковые значения, чтобы определить точку отказа и проверить механизмы восстановления.
Цели:
- Найти предел масштабируемости системы.
- Обнаружить утечки ресурсов (память, соединения) под нагрузкой.
- Проверить отказоустойчивость и восстановление после сбоя.
- Оценить деградацию производительности при экстремальных условиях.
Пример сценария и кода с использованием Locust (Python):
from locust import HttpUser, task, between
import random
class StressTestUser(HttpUser):
wait_time = between(0.1, 0.5) # Очень агрессивная частота запросов
@task(3)
def load_main_page(self):
self.client.get("/")
@task(2)
def search(self):
query = random.choice(["test", "product", "user", "x" * 100]) # Длинный запрос
self.client.get(f"/search?q={query}")
@task(1)
def checkout(self):
# Создаем нагрузку на самый тяжелый процесс
self.client.post("/cart/checkout", json={"items": [{"id": i} for i in range(50)]})
Как запустить: locust -f stress_test.py --headless -u 1000 -r 100 --run-time 30m
-u 1000: 1000 виртуальных пользователей.-r 100: Скорость роста — 100 пользователей в секунду.--run-time 30m: Длительность теста 30 минут.
Ключевые метрики для анализа:
- График latency vs. load: В какой момент время отклика резко растет.
- Количество ошибок (5xx): Когда и какие ошибки появляются.
- Потребление ресурсов (CPU, RAM, I/O): Наблюдаются ли утечки после снятия нагрузки.
- Поведение после теста: Восстанавливается ли система до нормального состояния автоматически.