Skip to content
IRC-CodingIRC-Coding
Load TestingPerformance Testingтестирование нагрузкиk6JMeterGatling

Load Testing: поведение системы под реальной нагрузкой

Изучите Load Testing: профили нагрузки, пропускная способность, время отклика, инструменты и лучшие практики.

S

schutzgeist

7 min read
Load Testing: поведение системы под реальной нагрузкой

Load Testing

Load Testing — это метод проверки производительности, который изучает поведение приложения под ожидаемой, реалистичной нагрузкой. Его задача выявить проблемы с производительностью до того, как их заметят пользователи в production. Load Testing помогает измерить пропускную способность, время отклика, стабильность и требования к ресурсам под нормальной нагрузкой.

В двух словах

  • Load Testing имитирует ожидаемую нагрузку пользователей на приложение.
  • Измеряет пропускную способность, время отклика, процент ошибок и использование ресурсов.
  • Основные инструменты: k6, JMeter и Gatling.
  • Load Testing отличается от Stress, Spike и Soak Testing.
  • Профили нагрузки определяют, как нагрузка распределяется во времени.

Что такое Load Testing и зачем он нужен

Load Testing проверяет, может ли приложение выдержать ожидаемую нагрузку пользователей. При этом приложение нагружается определённым количеством виртуальных пользователей или запросов в течение заданного периода. Результаты показывают, работает ли приложение в приемлемых пределах или возникают узкие места.

Типичные вопросы, на которые отвечает Load Testing:

  • Сколько пользователей могут работать одновременно без неприемлемого увеличения времени отклика?
  • Сколько запросов в секунду система стабильно обрабатывает?
  • Растёт ли процент ошибок при увеличении нагрузки?
  • Как ведут себя CPU, память и база данных под нагрузкой?
  • Соответствует ли система определённым Service Level Agreements?

Отличия от других видов тестирования производительности

Performance Testing — общий термин для различных видов тестирования. Load Testing — один из них, но не единственный.

  • Load Testing: проверяет поведение под ожидаемой, реалистичной нагрузкой.
  • Stress Testing: превышает ожидаемую нагрузку и находит пределы системы.
  • Spike Testing: создаёт очень быстрые, экстремальные всплески нагрузки, например при старте продаж.
  • Soak Testing: работает долгое время под постоянной нагрузкой, чтобы найти утечки ресурсов.

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

Пропускная способность

Пропускная способность показывает, сколько запросов или транзакций система может обработать за определённое время. Обычно выражается в запросах в секунду.

Время отклика

Время отклика — это длительность от момента отправки запроса до получения полного ответа. Часто анализируется как среднее значение, медиана или процентиль. 95-й процентиль показывает, насколько медленны запросы для большинства пользователей.

Процент ошибок

Процент ошибок — это доля запросов, на которые не получен успешный ответ. Внезапный рост указывает на узкое место.

Использование ресурсов

Использование ресурсов включает CPU, оперативную память, сеть и дисковое пространство. Помогает найти причину проблем с производительностью.

Concurrent User

Concurrent User — это одновременно активные пользователи, отправляющие запросы в один и тот же момент. Важны для реалистичного планирования профилей нагрузки.

Профили нагрузки

Профили нагрузки определяют, как нагрузка распределяется во времени. Они помогают воспроизвести реалистичные сценарии.

Постоянная нагрузка

При постоянной нагрузке количество пользователей или запросов остаётся одинаковым в течение длительного периода. Этот профиль подходит для проверки стабильности под определённой baseline нагрузкой.

Ramp-up

Ramp-up постепенно повышает нагрузку, пока не будет достигнута целевая величина. Так можно наблюдать, как приложение ведёт себя при добавлении всё большего числа пользователей. Ramp-up особенно важен для тестирования переходе от простоя к нормальной работе.

Пиковая нагрузка

Пиковая нагрузка имитирует внезапные, короткие всплески нагрузки. Пример — наплыв на сайт билетов сразу после старта продаж. Этот профиль показывает, насколько хорошо система справляется с резкими изменениями нагрузки.

Soak Test

Soak Test заставляет приложение работать много часов или даже дней под постоянной нагрузкой. При этом становятся видны утечки ресурсов, такие как растущее потребление памяти, утечки соединений или переполнение файлов логов.

Ступенчатая нагрузка

Ступенчатая нагрузка повышает нагрузку в несколько этапов. Между этапами есть короткие плато. Этот профиль хорошо подходит для сравнения производительности при разных уровнях нагрузки и поиска точки падения производительности.

Практический пример

Следующий пример показывает типичный Load-Test для веб-приложения. Этот пример выбран потому, что он объединяет основные профили нагрузки: ramp-up, постоянную нагрузку и снижение. Цель показать, как строится реалистичный тест и какие метрики при этом отслеживаются.

Цель: 1.000 одновременно активных пользователей, время отклика менее 500ms

Этапы:
1. 100 пользователей в течение 2 минут      (Разогрев / Ramp-up)
2. 500 пользователей в течение 5 минут        (первое плато)
3. 1.000 пользователей в течение 10 минут     (целевая нагрузка / плато)
4. Снижение в течение 2 минут        (спад)

Почему именно такие этапы?

  • Разогрев со 100 пользователями: приложение и инфраструктура медленно доводятся до рабочей температуры. Кэши базы данных наполняются, пулы соединений инициализируются.
  • 500 пользователей в течение 5 минут: первое плато, чтобы наблюдать поведение при средней нагрузке и выявить ранние узкие места.
  • 1.000 пользователей в течение 10 минут: собственно целевое значение. Здесь проверяется, выдерживает ли приложение ожидаемую пиковую нагрузку стабильно в течение длительного времени.
  • Снижение: плавный спад нагрузки показывает, быстро ли система восстанавливается и освобождаются ли ресурсы, такие как память.

На протяжении теста непрерывно собираются данные о пропускной способности, времени отклика, проценте ошибок и использовании ресурсов. Результаты сравниваются с определёнными SLA.

Основные инструменты

k6

k6 — современный инструмент с открытым исходным кодом для Load Testing, разрабатываемый Grafana Labs. Тесты пишут на JavaScript и интегрируют в CI/CD-pipeline. k6 популярен в команды разработки благодаря лёгкости, script-подходу и хорошей документации.

Apache JMeter

JMeter — один из самых известных инструментов для Load Testing. Предоставляет графический интерфейс и поддерживает множество протоколов: HTTP, SOAP, JDBC и JMS. JMeter особенно хорош для сложных сценариев и enterprise-окружений.

Gatling

Gatling — мощный инструмент для Load Testing, тесты пишут на Scala, Kotlin или Java. Отличается высокой производительностью load-генератора и идеален для больших нагрузочных тестов с множеством виртуальных пользователей.

Другие инструменты

  • Locust: инструмент на базе Python с простым созданием скриптов.
  • Artillery: современный Node.js-инструмент для Load Testing.
  • Loader.io: облачный сервис нагрузочного тестирования.
  • NeoLoad: enterprise-решение для сложных тестовых окружений.

Преимущества и недостатки

ПреимуществаНедостатки
Ранее выявление проблем с производительностьюТрудозатратная подготовка тестового окружения
Лучшее планирование инфраструктурыНужно окружение, близкое к production
Проверка соответствия SLA и Service Level ObjectivesИнтерпретация результатов требует опыта
Снижение времени простоя в productionТестовые данные должны быть реалистичными и анонимизированными
Объективное измерение пользовательского опытаИнструменты и инфраструктура требуют затрат
Ранее планирование масштабированияLoad-тесты могут нагружать production-подобные системы

Рекомендуемые практики

  • Определите четкие цели и SLA перед началом тестирования.
  • Создавайте реалистичные профили нагрузки на основе данных production.
  • Используйте тестовую среду, максимально приближенную к production.
  • Изолируйте внешние системы, такие как платежные сервисы или почтовые серверы.
  • Мониторьте метрики сервера и приложения во время теста.
  • Документируйте настройку теста, результаты и принятые меры.
  • Повторяйте тесты после каждого значительного изменения.

Ключевые концепции для подготовки

  • Load Testing: Проверка поведения приложения под ожидаемой, реалистичной нагрузкой.
  • Отличие от Stress Testing: Load Testing остается в ожидаемых пределах, Stress Testing выходит за них.
  • Spike Testing: Имитирует внезапные, экстремальные всплески нагрузки.
  • Soak Testing: Длительный непрерывный запуск для обнаружения утечек ресурсов.
  • Важные метрики: Пропускная способность, время отклика, частота ошибок, использование ресурсов, Concurrent User.
  • Процентили: 95-й процентиль более информативен, чем среднее значение, для оценки опыта большинства пользователей.
  • Профили нагрузки: Постоянная нагрузка, наращивание, пиковая нагрузка, ступенчатая нагрузка, soak test.
  • Основные инструменты: k6, JMeter, Gatling, Locust, Artillery.
  • SLA: Service Level Agreement определяет приемлемые граница производительности.
  • Тестовая среда, приближенная к production: Необходима для получения реалистичных результатов.
  • Тестовые данные: Должны быть реалистичными, анонимизированными и репрезентативными.

Основные источники

  1. https://k6.io
  2. https://jmeter.apache.org
  3. https://en.wikipedia.org/wiki/Load_testing

Часто задаваемые вопросы

Что такое Load Testing?

Load Testing проверяет поведение приложения под ожидаемой, реалистичной нагрузкой. Он измеряет пропускную способность, время отклика, частоту ошибок и использование ресурсов.

Что такое профиль нагрузки?

Профиль нагрузки определяет ожидаемое количество пользователей, частоту запросов и распределение транзакций во времени. Это основа для реалистичного тестирования.

Какие метрики измеряют при Load Testing?

Основные метрики: пропускная способность, время отклика, частота ошибок, использование ресурсов и количество Concurrent User.

Что такое Soak Test?

Soak Test - это длительный непрерывный запуск под постоянной нагрузкой. Он помогает выявить утечки ресурсов, такие как растущее потребление памяти или брошенные соединения.

Назовите инструмент для Load Testing.

Популярные инструменты: k6, Apache JMeter, Gatling, Locust и Artillery.

Что такое Ramp-up?

Ramp-up - это постепенное увеличение нагрузки до целевого значения. Это помогает наблюдать поведение системы при росте количества пользователей.

Что такое пиковая нагрузка?

Пиковая нагрузка - это внезапные, кратковременные всплески. Они имитируют, например, наплыв покупателей в начале распродажи.

Что такое пропускная способность?

Пропускная способность - это количество запросов или транзакций, которые система может обработать в секунду. Это ключевой показатель производительности.

Что такое частота ошибок?

Частота ошибок - это доля запросов, которые не были обработаны успешно. Резкий рост указывает на узкое место в системе.

Почему важна тестовая среда, приближенная к production?

Различия в оборудовании, размере базы данных, сети и конфигурации могут исказить результаты. Среда, приближенная к production, обеспечивает реалистичные результаты.

В чем разница между Load Testing и Stress Testing?

Load Testing остается в ожидаемых пределах нагрузки. Stress Testing выходит за эти пределы и находит границы системы.

Что такое время отклика?

Время отклика - это длительность от момента запроса до полного получения ответа. Обычно выражается как среднее значение, медиана или процентиль.

Что такое Concurrent User?

Concurrent User - это одновременно активные пользователи, отправляющие запросы системе в один момент времени. Они являются основой для профилей нагрузки.

Что такое Load-Generator?

Load-Generator - это система или инструмент, который создает виртуальную нагрузку для теста и отправляет ее приложению.

Когда следует проводить Load Testing?

Load Testing следует проводить перед выпуском, при изменениях инфраструктуры, при проблемах с производительностью или перед ожидаемыми всплесками трафика.

Что такое Spike Test?

Spike Test создает очень быстро экстремальные всплески нагрузки и проверяет, как система справляется с внезапными изменениями нагрузки.

Что такое процентиль при времени отклика?

Процентиль показывает, какой процент запросов находится ниже определенного значения. 95-й процентиль часто более информативен, чем среднее значение.

Что такое SLA?

SLA, или Service Level Agreement, определяет приемлемые граница производительности, такие как время отклика или доступность.

Что такое Stress Test?

Stress Test нагружает систему сверх ожидаемых пределов, чтобы найти границы и поведение при перегрузке.

Что такое тестовые данные при Load Testing?

Тестовые данные должны быть реалистичными, анонимизированными и репрезентативными, чтобы тест дал достоверные результаты.

Продолжение пути обучения Software Testing

Следующая статья в пути обучения Software Testing посвящена Performance Testing — как Performance Testing комплексно проверяет производительность системы.

Назад к блогу
Share:

Nächster Artikel in Качество программного обеспечения

Weiterlesen
Checklist Code Review: структурированная проверка Pull Requests

Похожие статьи