Добавить в корзинуПозвонить
Найти в Дзене
Журнал «Код»

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

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

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

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

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

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

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

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

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

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

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

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

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

Цели и задачи

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

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

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

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

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

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

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

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

Инструменты

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

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

-3

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

-4

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

-5

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

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

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

Что дальше

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