Блог

Полезный стресс или нагрузочное тестирование: виды и метрики

Часто под нагрузочным тестированием понимают тестирование на производительность. Но на самом деле это только один из типов подобной аналитической работы. В этой статье мы рассмотрим их все.

Начнем с упомянутого тестирования производительности.

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

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

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

Здесь мы оцениваем способность системы к регенерации и возвращению к нормальному состоянию. Сколько по времени приложение будет «лежать», и как быстро восстановится, насколько оперативно переключится между серверами для продолжения работы. По сути, мы ищем максимальную точку деградации, где начинаются ошибки и отказы и анализируем, как ведет себя система. 

Объемное тестирование. 

Используется редко, что делается зря, так как этот вид тестирования позволяет узнать, что будет с системой при увеличении потока пользователей. При объемном тестировании мы проверяем:

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

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

Тестирование стабильности (надежности).

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

Бывает так, что на сайте в режиме отладки включено «Логирование всего». То есть мы записываем все действия пользователя, и сервер очень быстро забивается. В этом случае к нему практически нельзя подключиться.

Метрики

Время ожидания отклика — интервал между запросом и ответом сервера. Логично, что чем он меньше, тем лучше для пользователя. Золотой серединой принято считать промежуток времени в 100 миллисекунд. Если отклик больше — то «все плохо» или вы портал «Госуслуг», а если меньше - то большой молодец. 

Пропускная способность — количество пользователей или запросов, которым одновременно отвечает система. Здесь же смотрим, как быстро работают сервисы между собой для передачи отклика. Измеряем в количестве запросов в секунду. 

Ширина канала — замеряем в целом максимальный объем запросов и пользователей, который может обработать система. Например, тысячи китайцев, которые вводят логин и пароль :)

Перцентили — замеряем среднее время ожидания. Корректно оценивать работу сервера для 90 или 99 процентов пользователей. Остальные, к сожалению, будут страдать. 

Частота ошибок.

Метрика показывает, что в системе что-то не так: мы отлавливаем те самые 400-сотые ошибки, ищем логи самого приложения. Смотрим, какой процент наших ответов на запросы успешен, и как он возрастает в зависимости от количества запросов. 

Напоследок расскажем забавную историю о юных QA-инженерах, применяющих нагрузочное тестирование — школьниках из Казани, которые написали свою систему для теста. В тот момент, когда родителям раз в месяц отправляли данные с оценками учеников, сайт школы «падал». Ребята просто «роняли» портал своими Ddos-атаками, а их программа генерировала кучу запросов на сервер. Лучше, как говорится, уронить систему, а не лицо. 

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