Алекс Смит: Тестирование ПО с Нуля до Специалиста
February 21

13.1 Введение в Нагрузочное тестирование. Цели нагрузочного тестирова

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

Для чего нужно нагрузочное тестирование?

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

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

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

Все мы знаем про черную пятницу, это день скидок, когда мы можем купить товар с большой скидкой. Представим, что у нас есть интернет-магазин по продаже электроники, и для него норма производительности, скажем 1000 пользователей, одновременно находящихся на сайте и выполняющие определенные действия -регистрация, поиск товара, оформление товара, покупка.
Наступает черная пятница, и вместо 1000 человек, на нашем сайте одновременно находится 10000 человек, что же произойдет? Норма превышена в 10 раз и в лучшем случае сайт будет работать медленней, часть операций не будет проходить, а в худшем случае наш сервер вовсе выйдет из строя и хозяева данного ресурса понесут большие убытки.

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

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

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

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

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

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

2. Выявление проблемных участков или как их еще называют - «узких мест»;

3. Проверка стабильности (в некоторых источниках вы можете встретить название надежности) – длительная нагрузка нашей системы при нормальных условиях 70-80 % от максимума(который указан в требованиях и который должна выдерживать наша система);

Предположим что у нас есть интернет магазин. Заказчик закладывает что норма посещения сайта 500 пользователей одновременно. То есть по статистике больше не сидит. Прописывает максимум системы, то есть максимальное количество пользователей, который сайт должен выдерживать, например 1000, вдруг праздники, распродажи и т.д

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

5. Re-test, то есть проверка исправления ошибки - когда мы обнаружили проблемный участок в нашей системе, разработчики его поправили и мы производим повторную проверку;

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

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

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