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

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

Содержание

Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ

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

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

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

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

  • Какая нагрузка является критической?
  • Какова частота ошибок?
  • Падает ли приложение?
  • Сколько времени требуется для восстановления после сбоя?
  • Есть ли утечки памяти?

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

  1. Многие инструменты для нагрузочного тестирования являются лицензионными, а лицензии стоят приличных денег.
  2. Даже в случае бесплатных инструментов с открытым исходным кодом, таких как JMeter, требуется среда нагрузочного тестирования, которая должна быть максимально приближена к настройкам производственной среды. Это снова приводит к дополнительным затратам.
  3. Для написания скриптов стресс-тестов нужно знать язык программирования, который поддерживает выбранный инструмент.
  4. Неправильно настроенный или составленный план/скрипт стресс-тестирования может привести к ложным проблемам производительности, на устранение которых уходит значительное количество времени и ресурсов.

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

  1. Основная цель стресс-тестирования – определить устойчивость тестируемой системы. То есть узнать, как она ведет себя в условиях экстремальной нагрузки.
  2. Стресс-тестирование помогает определить возможности восстановления и обработки ошибок приложения после сбоя. Это одно из нефункциональных требований. Проводя тестирование, мы измеряем время, необходимое приложению для восстановления после сбоя.
  3. Это тестирование помогает найти уязвимости в системе безопасности, которые могут появиться во время длительной пиковой нагрузки.
  4. С помощью стресс-тестирования можно обнаружить проблемы утечки памяти, при которых память не освобождается даже после того, как программа уже не работает.
  5. Оно помогает измерить целостность данных приложения во время экстремальной нагрузки (после сбоя данные должны быть в надежном состоянии).

Примеры из реальной жизни

Давайте рассмотрим несколько реальных сценариев, в которых мы можем найти применение стресс-тестированию.

  1. Результаты на веб-сайте Совета по образованию. Стресс-тестирование таких сайтов совершенно необходимо, поскольку в день получения какого-либо результата огромное количество пользователей – абитуриентов, студентов – зайдут в приложение, чтобы проверить свои результаты. Пик нагрузки приходится на короткий промежуток времени, как раз на тот момент, когда результат уже готов. Стресс-тестирование может помочь найти точку, на которой приложение перестает работать, и проанализировать его поведение и возможность восстановления в случае сбоя.
  2. Приложения для электронной коммерции. Во время распродаж, выпуска новых продуктов, фестивалей приложения для электронной коммерции, как правило, собирают большое количество пользователей, причем за очень короткий срок.
  3. Новостной сайт после важного события. В качестве примера можно привести день, когда скончался Майкл Джексон. Большинство новостных сайтов замедлили работу, а некоторые из них перестали открываться. Приложение, прошедшее тщательное стресс-тестирование, должно быть более надежным и даже в случае неизбежного сбоя или отказа довольно быстро восстановиться.

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

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

#Стресс-тестированиеНагрузочное тестирование
1.Подвид тестирования производительности, выполняемый для определения поведения приложения под экстремальной нагрузкой.Подвид тестирования производительности, выполняемый для определения производительности приложения под ожидаемой нагрузкой.
2.Атрибуты качества приложения, определяемые в ходе стресс-тестирования:
– точка, при которой приложение дает сбой
– устойчивость
– восстанавливаемость
– стабильность и т.д.
Атрибуты качества приложения, определяемые в ходе нагрузочного тестирования:
– производительность
– время отклика
– пропускная способность
– количество ошибок и т.д.
3.Максимальная нагрузка превышает точку, при которой приложение может дать сбой.Точка, при которой приложение может дать сбой, – это верхний предел нагрузки.

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

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

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

  • Apache JMeter – один из самых популярных инструментов для тестирования производительности. Он бесплатный и с открытым исходным кодом, но освоить его получится не так быстро по сравнению с другими платными и бесплатными инструментами.
  • LoadRunner – Micro Focus LoadRunner – один из лидеров отрасли среди инструментов тестирования производительности. Существует бесплатная версия этого инструмента, которая может поддерживать 50 виртуальных пользователей.
  • LoadNinja – платный инструмент, но в отличие от других инструментов, которые имитируют пользовательскую нагрузку путем создания HTTP-запросов, он работает с реальными браузерами в облаке. Это помогает значительно сократить время написания скриптов, а также упрощает процесс.
  • Locust – это бесплатный инструмент тестирования производительности с открытым исходным кодом, который требует создания скриптов на Python. Он поддерживает проведение нагрузочного теста на нескольких распределенных машинах.
  • NeoLoad – это опять же платный инструмент, но его функция перетаскивания, а также другие функции, такие как запись, поддержка скриптов Selenium и т.д., помогают быстрее создавать скрипты нагрузочных тестов.

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

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

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