Что такое СТРЕСС-тестирование в тестировании программного обеспечения?

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

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

  • 🔘 Определение: Стресс-тестирование измеряет надежность и способность обрабатывать ошибки при нагрузках, значительно превышающих те, которые когда-либо возникают в производственной среде.
  • ☑️ Цель: В ходе теста определяется точное место отказа и проверяется возможность восстановления работоспособности системы после возвращения нагрузки к нормальному уровню.
  • Объем: Распределенные, прикладные, транзакционные, системные и исследовательские варианты задействуют каждый из различных уровней системы.
  • 🧪 Процесс: Планирование, написание сценария, выполнение, анализ, а затем настройка — обычно в течение трех или четырех полных циклов, прежде чем будут достигнуты целевые показатели.
  • 🇧🇷 оснастка: LoadRunner, Apache JMeter, StressTester, и NeoЗагрузка генерирует одновременно работающих виртуальных пользователей и собирает данные ответа.
  • 📊 Метрики: Пропускная способность, количество страниц в секунду, время попадания в систему, время до получения первого байта и количество неудачных соединений — все это позволяет количественно оценить результат.

Стресс-тестирование в тестировании программного обеспечения

Что такое стресс-тестирование?

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

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

In Программная инженерияСтресс-тестирование часто упоминается наряду с другими методами. Тест на выносливостьОднако эти два метода различаются: стресс-тестирование предполагает приложение аномально высокой нагрузки в течение короткого промежутка времени для определения точки разрушения, в то время как испытание на выносливость (пропитку) предполагает выдерживание умеренной нагрузки в течение нескольких часов для выявления постепенного износа.

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

Копирование очень большого блока данных с веб-страницы для создания нагрузки на настольное приложение.

Тестируемое приложение подвергается нагрузке, когда 5 ГБ данных копируются с веб-сайта и вставляются в Блокнот. Блокнот теперь находится под нагрузкой и выдает сообщение об ошибке «Не отвечает», как показано на следующем скриншоте.

После вставки 5 ГБ данных в Блокнот появляется сообщение об ошибке «Не отвечает».

Тот же принцип напрямую применим и к серверным системам.

Необходимость стресс-тестирования

Рассмотрим следующие примеры из реальной жизни, где использование стресс-тестирования становится очевидным:

  • Во время фестивалей работает интернет-магазин.ping На сайте может наблюдаться всплеск трафика или объявление о распродаже.
  • Когда блог упоминается в ведущей газете, его посещаемость резко возрастает.

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

Стресс-тестирование также чрезвычайно важно по следующим причинам:

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

В следующем разделе изложены требования, предъявляемые к успешному стресс-тесту.

Цели стресс-тестирования

Цель стресс-тестирования — проанализировать поведение системы после сбоя. Для успешного проведения стресс-тестирования система должна отображать соответствующее сообщение об ошибке в экстремальных условиях.

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

Основная цель стресс-тестирования — убедиться в способности системы восстанавливаться после сбоя, что называется восстанавливаемостью. Тестирование восстановления затем детально проверяет эту процедуру восстановления.

Испытание под нагрузкой против стресс-тестирования

Обе методики относятся к Тестирование производительности Это касается всей семьи, поэтому их легко перепутать. На диаграмме ниже показано сравнение двух профилей нагрузки.

График, сравнивающий профиль постоянной нагрузки при нагрузочных испытаниях с профилем возрастающей нагрузки при стресс-тестировании.

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

В число связанных профилей входят: Спайк-тестирование (внезапный короткий всплеск), Объемное тестирование (большие объемы данных, а не большое количество пользователей) и Тестирование масштабируемости (потенциал роста).

Виды стресс-тестирования

Ниже описаны типы стресс-тестирования, каждый из которых рассматривается отдельно.

Распределенное стресс-тестирование

В распределенных клиент-серверных системах тестирование проводится на всех клиентах сервера. Роль стресс-сервера заключается в распространении набора стресс-тестов на всех стресс-клиентов и в... track — статус каждого клиента. После того, как клиент связывается с сервером, сервер добавляет имя клиента и начинает отправлять данные для тестирования. На рисунке ниже показано, как стресс-сервер связывается с одними клиентами, но не со всеми.

Распределенная система стресс-тестирования, в которой стресс-сервер связывается с Client1 и Client2, но теряет связь с Client3 и Client4.

Тем временем клиентские машины отправляют сигнал, или «пульс», подтверждающий, что они по-прежнему подключены к серверу. Если сервер не получает никакого сигнала от клиентской машины, эту машину необходимо дополнительно исследовать для отладки. На рисунке сервер может подключиться к двум клиентам (Client1 и Client2), но не может отправлять или получать сигналы от Client 3 и Client 4.

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

Стресс-тестирование приложений

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

Транзакционное стресс-тестирование

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

Системное стресс-тестирование

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

Исследовательское стресс-тестирование

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

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

Какой бы вариант ни был применен, последовательность выполнения остается неизменной.

Как проводить стресс-тестирование?

Процесс стресс-тестирования состоит из 5 основных этапов:

  • Шаг 1) Планирование стресс-теста: Здесь вы собираете данные о системе, анализируете систему и определяете цели стресс-тестирования.
  • Шаг 2) Создайте сценарии автоматизации: На этом этапе вы создаете сценарии автоматизации стресс-тестирования и генерируете тестовые данные для стресс-сценариев.
  • Шаг 3) Выполнение сценария: На этом этапе вы запускаете скрипты автоматизации стресс-тестирования и сохраняете результаты стресс-тестирования.
  • Шаг 4) Анализ результатов: На этом этапе вы анализируете результаты стресс-теста и выявляете узкие места.
  • Шаг 5) Настройка и оптимизация: На этом этапе вы выполняете тонкую настройку системы, изменяете конфигурации и оптимизируете код с целью достижения желаемого показателя производительности.

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

Рекомендуемые инструменты для стресс-тестирования

Четыре представленных ниже инструмента удовлетворяют большинству потребностей, от корпоративных пакетов до бесплатного варианта с открытым исходным кодом.

LoadRunner

LoadRunner Это широко используемый инструмент для нагрузочных испытаний, который теперь продается компанией [название компании]. OpenText в профессиональной, корпоративной и облачной версиях после перехода от HP к Micro Focus. OpenTextРезультаты испытаний под нагрузкой, полученные с помощью LoadRunner, рассматриваются как эталонные.

JMeter

Apache JMeter Это инструмент тестирования с открытым исходным кодом. Это чистый инструмент. Java Это приложение предназначено для стресс-тестирования и тестирования производительности, и оно охватывает такие типы тестов, как нагрузочное, функциональное и стрессовое тестирование. Текущие версии 5.6.x Apache JMeter требовать Java 8 или позже, с Java 17 рекомендовано.

Стресс-тестер

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

Neoнагрузка

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

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

Метрики для стресс-тестирования

Метрики помогают оценить производительность системы и обычно изучаются в конце стресс-теста. Часто используемые метрики сгруппированы в три группы.

Измерение масштабируемости и производительности

  • Страницы в секунду: Измеряет количество запрошенных страниц в секунду.
  • Пропускная способность: Базовый показатель — размер данных ответа в секунду.
  • раунды: Соотношение количества запланированных тестовых сценариев и количества случаев их выполнения клиентом.

Ответ приложения

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

Отказы

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

В заключительном разделе перечислены ситуации, которые чаще всего оправдывают проведение стресс-теста.

Примеры стресс-тестирования

Стресс-тестирование оправдано всякий раз, когда ожидается событие, которое значительно увеличит трафик сверх базового суточного уровня:

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

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

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

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

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

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

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

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

Да. Чертежи второго пилота JMeter Тестовые планы, скрипты k6 или Gatling, параметризованные генераторы данных и шаги конвейера CI, запрашиваемые из командной строки на простом языке. Рассматривайте результат как черновик: время обдумывания, темп и утверждения все еще нуждаются в проверке тестировщиком.

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

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

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