Что такое стресс-тестирование и как его проводят? Приведите пример.

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

Ответ

Стресс-тестирование (Stress Testing) — это вид тестирования производительности, при котором система подвергается нагрузке, превышающей ее расчетные пиковые значения, чтобы определить точку отказа и проверить механизмы восстановления.

Цели:

  1. Найти предел масштабируемости системы.
  2. Обнаружить утечки ресурсов (память, соединения) под нагрузкой.
  3. Проверить отказоустойчивость и восстановление после сбоя.
  4. Оценить деградацию производительности при экстремальных условиях.

Пример сценария и кода с использованием 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): Наблюдаются ли утечки после снятия нагрузки.
  • Поведение после теста: Восстанавливается ли система до нормального состояния автоматически.