При тестировании приложений мы часто хотим увидеть, как они себя ведут в условиях экстремальной нагрузки. Цель заключается в том, чтобы проверить стабильность работы приложения, а также возможность успешного восстановления после снижения нагрузки. Этот тип тестирования известен как стресс-тестирование.
Содержание
- Что такое стресс-тестирование?
- Недостатки стресс-тестирования
- Необходимость проведения стресс-тестирования
- Стресс-тестирование и нагрузочное тестирование
- Некоторые популярные инструменты для стресс-тестирования
Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ
Что такое стресс-тестирование?
Стресс-тестирование – это один из видов тестирования производительности. При таком тестировании мы проверяем стабильность приложения, подвергая его экстремальной нагрузке, которая превышает ожидаемую реальную рабочую нагрузку.
С помощью стресс-тестирования мы стремимся найти предельную нагрузку, при которой приложение будет давать сбой. Т.е. нагрузку, за пределами которой приложение не отвечает или начинает вести себя ненормально.
В основном, в стресс-тестировании мы используем инструменты тестирования производительности, такие как Apache JMeter. Они помогают нам в моделировании нагрузки реальных пользователей посредством сценариев, которые мы заранее напишем. Используя эти инструменты, мы можем подвергать приложения нагрузке большого количества пользователей, которые получают доступ к различным функциональным возможностям приложения. Так, если приложение рассчитано на обслуживание 100 одновременных пользователей, мы подвергаем его нагрузке в 120 пользователей. Затем мы анализируем поведение приложения и пытаемся ответить на следующие вопросы:
- Какая нагрузка является критической?
- Какова частота ошибок?
- Падает ли приложение?
- Сколько времени требуется для восстановления после сбоя?
- Есть ли утечки памяти?
Недостатки стресс-тестирования
- Многие инструменты для нагрузочного тестирования являются лицензионными, а лицензии стоят приличных денег.
- Даже в случае бесплатных инструментов с открытым исходным кодом, таких как JMeter, требуется среда нагрузочного тестирования, которая должна быть максимально приближена к настройкам производственной среды. Это снова приводит к дополнительным затратам.
- Для написания скриптов стресс-тестов нужно знать язык программирования, который поддерживает выбранный инструмент.
- Неправильно настроенный или составленный план/скрипт стресс-тестирования может привести к ложным проблемам производительности, на устранение которых уходит значительное количество времени и ресурсов.
Необходимость проведения стресс-тестирования
- Основная цель стресс-тестирования – определить устойчивость тестируемой системы. То есть узнать, как она ведет себя в условиях экстремальной нагрузки.
- Стресс-тестирование помогает определить возможности восстановления и обработки ошибок приложения после сбоя. Это одно из нефункциональных требований. Проводя тестирование, мы измеряем время, необходимое приложению для восстановления после сбоя.
- Это тестирование помогает найти уязвимости в системе безопасности, которые могут появиться во время длительной пиковой нагрузки.
- С помощью стресс-тестирования можно обнаружить проблемы утечки памяти, при которых память не освобождается даже после того, как программа уже не работает.
- Оно помогает измерить целостность данных приложения во время экстремальной нагрузки (после сбоя данные должны быть в надежном состоянии).
Примеры из реальной жизни
Давайте рассмотрим несколько реальных сценариев, в которых мы можем найти применение стресс-тестированию.
- Результаты на веб-сайте Совета по образованию. Стресс-тестирование таких сайтов совершенно необходимо, поскольку в день получения какого-либо результата огромное количество пользователей – абитуриентов, студентов – зайдут в приложение, чтобы проверить свои результаты. Пик нагрузки приходится на короткий промежуток времени, как раз на тот момент, когда результат уже готов. Стресс-тестирование может помочь найти точку, на которой приложение перестает работать, и проанализировать его поведение и возможность восстановления в случае сбоя.
- Приложения для электронной коммерции. Во время распродаж, выпуска новых продуктов, фестивалей приложения для электронной коммерции, как правило, собирают большое количество пользователей, причем за очень короткий срок.
- Новостной сайт после важного события. В качестве примера можно привести день, когда скончался Майкл Джексон. Большинство новостных сайтов замедлили работу, а некоторые из них перестали открываться. Приложение, прошедшее тщательное стресс-тестирование, должно быть более надежным и даже в случае неизбежного сбоя или отказа довольно быстро восстановиться.
Стресс-тестирование и нагрузочное тестирование
Нагрузочное и стресс-тестирование – это подвиды тестирования производительности. Некоторые люди используют их как взаимозаменяемые понятия, но это совершенно разные вещи. Давайте посмотрим, в чем разница между ними.
# | Стресс-тестирование | Нагрузочное тестирование |
---|---|---|
1. | Подвид тестирования производительности, выполняемый для определения поведения приложения под экстремальной нагрузкой. | Подвид тестирования производительности, выполняемый для определения производительности приложения под ожидаемой нагрузкой. |
2. | Атрибуты качества приложения, определяемые в ходе стресс-тестирования: – точка, при которой приложение дает сбой – устойчивость – восстанавливаемость – стабильность и т.д. | Атрибуты качества приложения, определяемые в ходе нагрузочного тестирования: – производительность – время отклика – пропускная способность – количество ошибок и т.д. |
3. | Максимальная нагрузка превышает точку, при которой приложение может дать сбой. | Точка, при которой приложение может дать сбой, – это верхний предел нагрузки. |
Некоторые популярные инструменты для стресс-тестирования
Инструменты для проведения стресс-тестирования не отличаются от инструментов для нагрузочного тестирования или тестирования производительности, если на то пошло. Так, любой инструмент для тестирования производительности может помочь в создании плана стресс-тестирования. Мы просто должны увеличить количество одновременных пользователей или запросов, чтобы превысить точку, при которой приложение может дать сбой. В основном это делается методом проб и ошибок.
Некоторые популярные инструменты для стресс-тестирования:
- Apache JMeter – один из самых популярных инструментов для тестирования производительности. Он бесплатный и с открытым исходным кодом, но освоить его получится не так быстро по сравнению с другими платными и бесплатными инструментами.
- LoadRunner – Micro Focus LoadRunner – один из лидеров отрасли среди инструментов тестирования производительности. Существует бесплатная версия этого инструмента, которая может поддерживать 50 виртуальных пользователей.
- LoadNinja – платный инструмент, но в отличие от других инструментов, которые имитируют пользовательскую нагрузку путем создания HTTP-запросов, он работает с реальными браузерами в облаке. Это помогает значительно сократить время написания скриптов, а также упрощает процесс.
- Locust – это бесплатный инструмент тестирования производительности с открытым исходным кодом, который требует создания скриптов на Python. Он поддерживает проведение нагрузочного теста на нескольких распределенных машинах.
- NeoLoad – это опять же платный инструмент, но его функция перетаскивания, а также другие функции, такие как запись, поддержка скриптов Selenium и т.д., помогают быстрее создавать скрипты нагрузочных тестов.
Перевод статьи «Performance Testing Tutorial».