Ответ
Стресс-тестирование проводится для оценки устойчивости системы за пределами нормальной рабочей нагрузки. Ключевые цели:
- Определить точку отказа — при какой нагрузке система перестаёт корректно работать.
- Проверить механизмы восстановления — как система ведёт себя после снятия пиковой нагрузки (возвращается ли в нормальное состояние).
- Выявить узкие места (bottlenecks) в условиях экстремального стресса.
- Спланировать масштабирование инфраструктуры на основе реальных пределов.
Типичные сценарии для проведения:
- Перед запуском высоконагруженных сервисов (например, онлайн-ритейл в Black Friday).
- После значительных изменений в архитектуре или миграции на новые серверы.
- Для тестирования лимитов и квот (например, rate limiting, пулы соединений БД).
Пример сценария стресс-теста с использованием Locust:
from locust import HttpUser, task, between
class StressTestUser(HttpUser):
wait_time = between(0.1, 0.5) # Агрессивная частота запросов
@task
def overload_api(self):
# Создаём нагрузку, превышающую нормальную в 10-100 раз
self.client.get("/api/v1/products", name="Get Products Stress")
self.client.post("/api/v1/orders",
json={"product_id": 1, "quantity": 100},
name="Create Order Stress")
Анализируемые метрики: время отклика (p95, p99), частота ошибок (HTTP 5xx, таймауты), потребление CPU/RAM, поведение сборщика мусора (для JVM), показатели базы данных.