Что такое нагрузочное тестирование? (Примеры)

⚡ Умное резюме

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

  • 👥 Основное определение: Нефункциональный тест, который имитирует ожидаемую пиковую нагрузку на пользователя и измеряет реакцию системы.
  • 🇧🇷 Главный показатель: Время отклика должно быть количественным, релевантным, реалистичным, достижимым и измеримым.
  • ???? ️ Что показало исследование: Максимальная вместимость, недостатки инфраструктуры, ограничения базы данных и проблемы с конфигурацией.
  • 📉 Нагрузка против напряжения: Нагрузка останавливается на ожидаемом пике; напряжение намеренно превышает его, чтобы найти точку разрушения.
  • 🇧🇷 Варианты инструментов: JMeterGatling и k6 — это программы с открытым исходным кодом; LoadRunner — это проверенный коммерческий вариант.
  • 📋 Необходимое условие: Запускайте его только после того, как приложение станет функционально стабильным, иначе дефекты будут маскировать результаты производительности.

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

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

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

Это тестирование обычно выявляет:

  • Максимальная работоспособность приложения
  • Определите, достаточна ли текущая инфраструктура для запуска приложения.
  • Устойчивость приложения к пиковой пользовательской нагрузке
  • Количество одновременных пользователей, которых может поддерживать приложение, и масштабируемость, позволяющая большему количеству пользователей получить к нему доступ.

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

испытание нагрузкой

Зачем нужны испытания под нагрузкой?

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

Примеры нагрузочного тестирования

  • Сайт Toysrus.com не справился с трафиком, сгенерированным его собственной рекламной кампанией, в результате чего были потеряны как маркетинговые затраты, так и ожидаемые продажи.
  • Веб-сайт авиакомпании не смог обработать более 10000 XNUMX пользователей во время фестивального предложения.
  • Британская энциклопедия объявила бесплатный доступ к своей онлайн-базе данных рекламным предложением. Они не могли справиться с потоком машин в течение нескольких недель.

Многие сайты страдают от задержки загрузки из-за большого трафика. Несколько фактов –

  • Процент отказов резко возрастает примерно через 3 секунды после загрузки страницы, и этот эффект усиливается на мобильных устройствах.
  • Медленная загрузка страниц обходится сайтам электронной коммерции в ощутимую прибыль с каждого посещения, поэтому производительность рассматривается скорее как бизнес-показатель, а не как технический.

Зачем нагрузочное тестирование?

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

Цели нагрузочного тестирования

Нагрузочное тестирование выявляет следующие проблемы перед выводом приложения на рынок или в производство:

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

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

Предварительные условия для проведения испытаний под нагрузкой

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

  • Измерено ли и сравнено ли время отклика – Количественный
  • Применимо ли время ответа к бизнес-процессу – Релевантно
  • Является ли время ответа оправданным – реалистично
  • Достижимо ли время ответа – Достижимо
  • Можно ли измерить время отклика с помощью инструмента или секундомера – Измеримо

Настройка среды перед нагрузочным тестированием

Аппаратная платформа Конфигурация программного обеспечения
  • Серверные машины
  • Процессоры
  • Память
  • Дисковое хранилище
  • Загрузка конфигурации машин
  • Конфигурация сети
  • Operating System
  • Серверное программное обеспечение

Стратегии нагрузочного тестирования

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

Стратегии нагрузочного тестирования

  • Ручное нагрузочное тестирование: Это одна из стратегий выполнения нагрузочного тестирования, но она не дает повторяемых результатов, не может обеспечить измеримые уровни нагрузки на приложение и ее невозможно координировать.
  • Собственные инструменты нагрузочного тестирования.: Организация, осознающая важность нагрузочного тестирования, может создать свои собственные инструменты для выполнения нагрузочного тестирования.
  • Инструменты нагрузочного тестирования с открытым исходным кодом: Существует несколько бесплатных инструментов нагрузочного тестирования с открытым исходным кодом. Возможно, они не такие сложные, как их платные аналоги, но если у вас ограниченный бюджет, они станут лучшим выбором.
  • Инструменты нагрузочного тестирования корпоративного класса: Обычно они оснащены функцией захвата/воспроизведения. Они поддерживают большое количество протоколов. Они могут моделировать исключительно большое количество пользователей.

Как проводить нагрузочное тестирование

Процесс нагрузочного тестирования можно кратко описать следующим образом:

  1. Создайте выделенный Тестовая среда для нагрузочного тестирования
  2. Определите сценарии нагрузочного тестирования.
  3. Определение транзакций нагрузочного тестирования для приложения
    • Подготовьте данные для каждой транзакции
    • Необходимо спрогнозировать количество пользователей, получающих доступ к системе.
    • Определить скорость соединения. Некоторые пользователи могут быть подключены через выделенные линии, в то время как другие могут использовать коммутируемый доступ.
    • Определите различные браузеры и операционные системы, используемые пользователями. 
    • Конфигурация всех серверов, таких как веб-серверы, серверы приложений и серверы БД.
  4. Выполнение и мониторинг тестовых сценариев. Сбор различных метрик
  5. Проанализируйте результаты. Давать рекомендации
  6. Точная настройка системы
  7. Перепроверить

Рекомендации по проведению испытаний под нагрузкой

Рекомендации по нагрузочному тестированию

  1. Нагрузочное тестирование следует планировать, как только приложение станет функционально стабильным.
  2. В пуле данных должно быть готово большое количество уникальных данных.
  3. Количество пользователей должно определяться для каждого сценария или сценариев.
  4. Избегайте создания подробных журналов для экономии дискового пространства ввода-вывода.
  5. Старайтесь избегать загрузки изображений на сайте.
  6. В процессе выполнения тестовых случаев нагрузочного тестирования следует регистрировать согласованность времени отклика за истекший период и сравнивать его с различными запусками тестов.

Разница между нагрузочным и стресс-тестированием

испытание нагрузкой Стресс-тестирование
Нагрузочное тестирование выявляет узкие места в системе при различных нагрузках и проверяет, как система реагирует на постепенное увеличение нагрузки. Стресс-тестирование определяет точку разрушения системы, чтобы выявить максимальную точку, после которой она сломается.
Чтобы распознать верхний предел системы, установите соглашение об уровне обслуживания приложения и проверьте, как система может справиться с большой нагрузкой. Проверить, как система ведет себя при экстремальных нагрузках и как восстанавливается после сбоя.
Создание повышенной нагрузки на веб-приложение — основная цель нагрузочного тестирования. Стресс-тестирование направлено на то, чтобы гарантировать, что при внезапной высокой нагрузке в течение длительного времени серверы не выйдут из строя.
Атрибутами, которые проверяются при нагрузочном тесте, являются пиковая производительность, количество серверов и время отклика. Этот вид тестирования проверяет время отклика стабильности и т. д.
В нагрузочном тестировании предел нагрузки — это порог обрыва. При стресс-тестировании предел нагрузки превышает порог обрыва.

Разница между функциональным и нагрузочным тестированием

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

Инструменты нагрузочного тестирования

LoadRunner

LoadRunner, изначально разработанный компанией HP, а теперь являющийся частью... OpenText После приобретения компанией Micro Focus, система тестирует приложения в условиях нормальной и пиковой нагрузки. Она создает нагрузку с помощью виртуальных пользователей, имитирующих реальный сетевой трафик, и отображает результаты в графическом виде.

Узнайте больше в Учебное пособие по LoadRunner.

Apache JMeter

Открытый исходный код Java Инструмент и наиболее широко используемый бесплатный вариант. Он поддерживает HTTP, JDBC, JMS, FTP и многое другое, хранит планы тестирования в формате XML и интегрируется в конвейеры CI. См. JMeter учебник для пошагового руководства.

Гатлинга

Инструмент с открытым исходным кодом, тесты которого написаны в виде кода на языке Scala или JavaОна справляется с высокой степенью параллелизма на скромном оборудовании и генерирует подробные HTML-отчеты, что подходит командам, предпочитающим тестовые сценарии с контролем версий.

k6

Инструмент с открытым исходным кодом, тесты которого написаны на JavaЭтот скрипт предназначен для самостоятельного тестирования производительности разработчиками в рамках конвейера непрерывной интеграции, а не в качестве отдельной задачи контроля качества.

Выбор инструмента

Отбор JMeter Для максимально широкого охвата протоколов без каких-либо затрат можно использовать Gatling или k6, если команда хочет хранить тесты в системе контроля версий вместе с приложением, а также коммерческий инструмент, такой как LoadRunner, если поддержка корпоративных протоколов и помощь поставщика оправдывают стоимость лицензии.

Преимущества и недостатки испытаний под нагрузкой

Ниже приведены преимущества нагрузочного тестирования:

  • Выявление узких мест производительности перед началом производства
  • Улучшает масштабируемость системы
  • Минимизируйте риск, связанный с простоем системы
  • Снижение стоимости отказа
  • Повышайте удовлетворенность клиентов

Недостатки нагрузочного тестирования:

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

Ключевые показатели, которые необходимо зафиксировать во время нагрузочного тестирования

В разделе «Предварительные условия» в качестве основного показателя устанавливается время отклика. На практике отчет о нагрузочном тестировании должен содержать шестизначные цифры, поскольку одно только время отклика не может объяснить причину замедления работы системы.

Метрика Что это вам говорит Предупреждающий знак
Среднее время ответа Типичный пользовательский опыт Возрастает с увеличением нагрузки
95-й процентиль времени ответа Опыт самых медленных пользователей Значительно выше среднего
Увеличить пропускную способность Количество успешно обработанных запросов в секунду Сплющивание или падение при подъеме груза
Коэффициент ошибок Доля неудачных или истекших по времени запросов Любое повышение выше согласованного порога
Параллельные пользователи Фактически достигнуто количество одновременных сессий. Ниже, чем предполагалось в сценарии.
Использование серверных ресурсов Запас ресурсов ЦП, памяти, диска и сети. Любой ресурс, превышающий примерно 80 процентов

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

Никогда не указывайте только среднее значение. Среднее значение 900 мс с 95-м процентилем 1.1 секунды описывает стабильную работу системы. То же среднее значение с 95-м процентилем 11 секунд означает, что один из двадцати пользователей сталкивается с неприемлемыми проблемами, которые скрываются за средним значением.

Как этот тест соотносится с другими тестами производительности

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

Тип теста Что увеличивается Вопрос, на который он отвечает
Тестирование нагрузки Количество одновременно использующих устройство пользователей, достигнув ожидаемого пика. Соответствует ли оно целевым показателям при нормальной пиковой нагрузке?
Объемное тестирование Данные, хранящиеся в базе данных Справится ли система с ростом объёма данных?
Стресс-тестирование Нагрузка превышает допустимую нагрузку до отказа Где и как он ломается?
Пиковое тестирование Загрузка, мгновенная и чрезвычайно Выживет ли оно и восстановится ли после шока?
Испытание на выносливость Продолжительность при нормальной нагрузке Снижается ли производительность со временем?
Тестирование на замачивание Продолжительность, просмотр ресурсов Есть ли утечки памяти или дескрипторов?
Тестирование стабильности Различные условия Сохраняет ли он свою надежность при изменении условий?

Здесь наиболее важно следующее различие: Тестирование на объём данных масштабирует объём данных, а нагрузочное тестирование — количество пользователей. Отчет, который обрабатывает десять тысяч строк за две секунды, а десять миллионов — за две минуты, имеет проблему с объемом данных, а не с нагрузкой, и никакое увеличение серверной мощности это не исправит.

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

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

Когда приложение становится функционально стабильным и на достаточно ранней стадии, чтобы обнаруженное узкое место еще можно было устранить. Запуск его в последнюю неделю не оставляет времени для принятия мер на основе выявленных проблем.

JMeterПотому что он бесплатный, поддерживает самый широкий спектр протоколов и имеет самую большую документацию. Переходите на Gatling или k6, если команда предпочитает тесты, написанные в виде кода с контролем версий.

Искусственный интеллект формирует реалистичные профили нагрузки на основе журналов производственного трафика, автоматически обнаруживает аномалии в результатах и ​​прогнозирует, какие изменения в коде, вероятно, приведут к снижению производительности, еще до планирования запуска.

Да. Инструменты искусственного интеллекта преобразуют записанные сценарии взаимодействия пользователей или спецификации API в исполняемые скрипты. Проверьте сгенерированное время ожидания и параметризацию данных, поскольку нереалистичные значения приводят к вводящим в заблуждение результатам.

Подведем итог этой публикации следующим образом: