Каковы основные цели и сценарии проведения стресс-тестирования?

«Каковы основные цели и сценарии проведения стресс-тестирования?» — вопрос из категории Тестирование производительности, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Стресс-тестирование проводится для оценки устойчивости системы за пределами нормальной рабочей нагрузки. Ключевые цели:

  • Определить точку отказа — при какой нагрузке система перестаёт корректно работать.
  • Проверить механизмы восстановления — как система ведёт себя после снятия пиковой нагрузки (возвращается ли в нормальное состояние).
  • Выявить узкие места (bottlenecks) в условиях экстремального стресса.
  • Спланировать масштабирование инфраструктуры на основе реальных пределов.

Типичные сценарии для проведения:

  1. Перед запуском высоконагруженных сервисов (например, онлайн-ритейл в Black Friday).
  2. После значительных изменений в архитектуре или миграции на новые серверы.
  3. Для тестирования лимитов и квот (например, 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), показатели базы данных.