Зачем нужно нагрузочное тестирование
easy

Зачем нужно нагрузочное тестирование

Когда обычного тестирования уже недостаточно

Недавно мы рассказали о том, зачем тестируют сайты и как это делают. Чаще всего в тестировании проверяют вёрстку, адаптив, работу ссылок и скриптов, поведение страницы с нестабильным интернетом. Но есть ещё одно тестирование, которое иногда включают в обычное, но чаще всего им занимаются отдельно — это нагрузочное тестирование.

Зачем нужно нагрузочное тестирование

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

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

Главное, что изменилось в нашем сценарии, — это точка входа, откуда пользователь попадает в сервис: из офиса или из дома. Соответственно, изменилось количество тех, кто пытается пользоваться сервисом снаружи, — нагрузка на эту часть выросла во много раз. 

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

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

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

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

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

Цели и задачи

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

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

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

Зачем нужно нагрузочное тестирование
Например, вот как тестировали сервер «Тотального диктанта» в 2021 году — на графике показано, что при росте нагрузки до 500 запросов в секунду среднее время загрузки сайта будет 10 секунд. Это долго. Но хорошо, что это выяснилось до запуска. Скриншот — ITSumma

Платформа тестирования

Нагрузочное тестирование редко проводят на рабочем сервере — если в итоге сервер не справится с нагрузкой, то все пользователи останутся без сервиса. Вместо этого тестировщики собирают окружение или платформу, максимально похожую на настоящую. Это значит:

  • такой же сервер (или с полностью одинаковыми характеристиками);
  • такая же скорость интернета;
  • такая же база данных;
  • такие же настройки софта.

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

Инструменты

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

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

Зачем нужно нагрузочное тестирование

Grafana — помогает следить за нужными метриками. Например, нам нужно понять, сколько пользователей генерирует, допустим, 1000 запросов в секунду, чтобы соотнести их со своей нагрузкой. Для этого мы с помощью Grafana виртуально переводим запросы в пользователей.

Зачем нужно нагрузочное тестирование

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

Зачем нужно нагрузочное тестирование

Отчёты — что мы получили в итоге после тестирования

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

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

Что дальше

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

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
easy