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

Ответ

Нагрузочное тестирование (Load testing) — это тип нефункционального тестирования, которое проверяет поведение системы под ожидаемой рабочей нагрузкой (например, определённым количеством одновременных пользователей или транзакций). Его цель — убедиться, что приложение стабильно работает в условиях, имитирующих реальное использование, и выявить проблемы производительности до релиза.

Ключевые цели и проверяемые метрики:

  • Время отклика системы на действия пользователей.
  • Пропускная способность (throughput) — количество обработанных операций в единицу времени.
  • Использование ресурсов сервера: загрузка CPU, потребление памяти (RAM), операции ввода-вывода (I/O).
  • Стабильность — отсутствие сбоев, утечек памяти или деградации производительности в течение теста.

Пример сценария в Apache JMeter:

<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Пользовательская нагрузка" enabled="true">
  <intProp name="ThreadGroup.num_threads">100</intProp> <!-- 100 виртуальных пользователей -->
  <intProp name="ThreadGroup.ramp_time">60</intProp>   <!-- Наращивание нагрузки за 60 секунд -->
  <longProp name="ThreadGroup.duration">300</longProp> <!-- Длительность теста 300 секунд -->
</ThreadGroup>

Важное отличие: Load testing не следует путать со стресс-тестированием (Stress testing). Нагрузочное тестирование проверяет систему в пределах или около плановых нагрузок, в то время как стресс-тестирование нацелено на работу за пределами нормальной ёмкости, чтобы определить точку отказа и поведение системы при восстановлении.

Ответ 18+ 🔞

Да ты посмотри, какая тема подъехала! Нагрузочное тестирование, ёпта! Это ж когда ты берёшь свою систему, которая вроде как работает, и начинаешь её нагружать, как тупого осла, чтобы посмотреть, когда у неё жопа отвалится. Но не сразу, а по плану, с изяществом!

Представь: у тебя есть сайт, и ты думаешь: "О, да тут 100 человек одновременно зайдут — и всё будет пиздато!". А на деле-то, блядь, при 50-ти уже сервер начинает пыхтеть, как паровоз, и время отклика такое, что можно сходить за пивом, вернуться, а страница ещё не открылась. Вот чтобы такого пиздеца не было, и придумали эту самую нагрузку гонять.

Чего мы хотим этим добиться, спросишь ты? А вот чего:

  • Время отклика. Чтобы система не тупила, как манда с ушами, а отвечала быстро. Кликнул кнопку — и тут же результат, а не через полчаса, когда уже и желание пропало.
  • Пропускная способность. Сколько операций в секунду она может проглотить, не подавившись. Чтобы не было так, что первые десять запросов пролетели, а на одиннадцатом всё накрылось медным тазом.
  • Жор ресурсов. Смотрим, как система жрёт память, грузит процессор и дёргает диски. Чтобы не было утечек памяти, которые тихой сапой, блядь, приводят к тому, что сервер просто падает через час работы, и все начинают охуевать.
  • Стабильность. Чтобы под нагрузкой система не начинала глючить, не падала и не деградировала. Проработала тестовые 5 минут, 5 часов — и всё так же шустро, без сюрпризов.

Вот, смотри, как это примерно в JMeter'е выглядит, этот самый сценарий:

<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Пользовательская нагрузка" enabled="true">
  <intProp name="ThreadGroup.num_threads">100</intProp> <!-- 100 виртуальных юзеров, которые будут насиловать систему -->
  <intProp name="ThreadGroup.ramp_time">60</intProp>   <!-- Не всех сразу, а наращиваем за минуту, по-человечески -->
  <longProp name="ThreadGroup.duration">300</longProp> <!-- И гоняем эту карусель целых 5 минут -->
</ThreadGroup>

И главное, блядь, не перепутай! Это не стресс-тестирование, где мы доводим систему до белого каления, чтобы посмотреть, как она сдохнет и воскреснет. Нет! Нагрузочное тестирование — это про реализм. Мы наваливаем на неё ровно столько, сколько она, по нашим прикидкам, должна выдерживать в рабочем режиме. А стресс-тест — это уже когда мы говорим: "А что будет, если пользователей будет овердохуища?" и начинаем ломать всё к хуям, чтобы найти пределы прочности. Это разные вещи, как кот и сука собака!