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

Стресс-тестирование (Stress Testing)

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

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

Содержание

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

Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.

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

Его также называют Endurance Testing, Fatigue Testing или Torture Testing.

Проводя стресс-тестирование, мы проверяем программу, используя очень большую нагрузку или много запросов. Мы делаем это много раз, пока программа не “сломается”.

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

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

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

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

Ситуации, когда стресс-тестирование необходимо

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

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

Пример 1: онлайн-магазин

Во время выпуска новых продуктов, распродаж, праздников, акций e-commerce приложения обычно получают большое количество пользователей за очень короткий промежуток времени. Если это не предусмотреть и не проверить путем стресс-тестирования, ваша система “ляжет” в самый ответственный момент.

Пример 2: новостной сайт во время крупного/вирусного события

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

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

Пример 3: сайт образовательного учреждения

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

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

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

В зависимости от того, что именно проверяется, стресс-тестирование можно разделить на несколько видов:

  • Стресс-тестирование приложений
  • Распределенное стресс-тестирование
  • Исследовательское стресс-тестирование
  • Системное стресс-тестирование
  • Транзакционное стресс-тестирование
Виды стресс-тестирования из приведенного выше списка, в форме "веера".

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

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

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

При таком стресс-тестировании проверяются все клиенты, связанные с сервером.

Например, сервер может взаимодействовать с клиентами A и B, но не может установить соединение с клиентами C и D, когда на систему накладывается большая нагрузка.

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

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

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

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

Приведем несколько примеров сценариев для исследовательского стресс-тестирования:

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

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

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

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

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

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

Основной целью проведения транзакционного стресс-тестирования является повышение производительности системы.

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

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

Процесс стресс-тестирования состоит из следующих этапов:

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

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

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

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

  • Apache JMeter
  • NeoLoad
  • Stress tester
  • LoadRunner

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

Преимущества

К числу важнейших преимуществ проведения стресс-тестирования можно отнести следующие:

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

Недостатки

К наиболее распространенным недостаткам стресс-тестирования можно отнести следующие:

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

Вывод

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

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

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

Перевод статьи «Stress Testing».

5 комментариев к “Стресс-тестирование (Stress Testing)”

  1. Пингбэк: Что такое нагрузочное тестирование?

  2. Пингбэк: Вопросы на собеседовании по тестированию производительности

  3. Пингбэк: Тестирование базы данных

  4. Пингбэк: 35 вопросов на собеседовании QA

  5. Пингбэк: Как эффективно провести стресс-тестирование

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *