Что такое нагрузочное тестирование (Load Testing)?

«Что такое нагрузочное тестирование (Load Testing)?» — вопрос из категории Тестирование, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нагрузочное тестирование — это тип нефункционального тестирования, целью которого является оценка поведения системы под ожидаемой или пиковой нагрузкой. Оно определяет, как приложение работает с точки зрения производительности, стабильности и масштабируемости при определенном количестве одновременных пользователей или запросов.

Основные цели:

  1. Определение пропускной способности: Максимальное количество операций в секунду, которое может обработать система.
  2. Измерение времени отклика: Как быстро система отвечает при разной нагрузке.
  3. Поиск узких мест (bottlenecks): Выявление компонентов, ограничивающих производительность (CPU, память, диск, сеть, СУБД).
  4. Проверка стабильности: Остается ли система работоспособной под длительной нагрузкой.

Типичный процесс:

  1. Планирование: Определение целей, сценариев (например, "логин пользователя"), метрик и целевой нагрузки (например, 1000 пользователей за 5 минут).
  2. Создание скриптов: Написание сценариев тестирования с помощью инструментов (JMeter, k6, Gatling).
  3. Запуск теста: Эмуляция нагрузки.
  4. Мониторинг: Сбор метрик с системы (серверов, БД, сети).
  5. Анализ результатов: Интерпретация данных и составление отчета.

Ключевые метрики:

  • Throughput (Пропускная способность): Количество успешных запросов в секунду (RPS).
  • Response Time (Время отклика): Среднее, 90-й/95-й процентили.
  • Error Rate (% ошибок): Процент неудачных запросов.
  • Utilization (Использование ресурсов): Загрузка CPU, потребление памяти, IO.

Пример конфигурации сценария в JMeter:

Thread Group
├─ Number of Threads (users): 200
├─ Ramp-up period (seconds): 60  // Наращиваем до 200 пользователей за 1 минуту
└─ Loop Count: Forever / 100

  HTTP Request
  ├─ Server Name: api.myapp.com
  ├─ HTTP Request: GET
  └─ Path: /api/v1/products

Нагрузочное тестирование — критический этап для обеспечения качества работы приложения в реальных условиях.