DEVops

Нагрузочное тестирование сайта: зачем оно нужно и как проводить

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

Что это такое

Нагрузочное тестирование, НТ — процесс систематической проверки и анализа программного обеспечения на соответствие нефункциональным требованиям с помощью предопределенной нагрузки и специализированных инструментов.
Предопределенная нагрузка — нагрузка, которая подается в процентном соотношении от профиля нагрузочного тестирования.
Профиль нагрузочного тестирования — набор сценариев с заданной интенсивностью, которые были определены путем анализа требований к тестируемой системе, либо получены на основе сбора статистических данных.
С помощью тестов оценивается производительность и время отклика сайта при различных нагрузках. Они имитируют увеличение числа посетителей, чтобы оценить, как сайт справится с дополнительной нагрузкой и будет обрабатывать запросы RPS.
Время отклика сайта во время теста РПС=252
Время отклика сайта во время теста РПС=262
RPS (request per second) — число запросов в секунду на страницы сайта, которые производили при нагрузочном тестировании. Показывает примерное количество запросов, после которого был прерван тест — либо из-за отсутствия ответа по сети, либо из-за ошибок в HTTP запросах.
Одни из показателей, который получают при НТ и используют для дальнейшего анализа — это показатели производительности.
Производительность — мера того, как хорошо и насколько эффективно система выполняет поставленные перед ней задачи.
В рамках проверки производительности НТ позволяет решить следующие задачи:
  • определить объем утилизации памяти — memory leak;
  • определить время отклика при различных нагрузках;
  • прогнозировать производительность при различных условиях;
  • моделировать производительность ресурса;
  • найти узкие места и определить пропускную способность системы;
  • определить пиковую производительность системы — peak perf.
Нагрузочное тестирование также может проверить масштабируемость ресурса, надежность работы и доступность при стандартных нагрузках.

Как проводится нагрузочное тестирование

Процесс тестирования — специалисты подключаются к сайту и запускают определенный набор сценариев с заданными интенсивностями, полученный на основе сбора статистических данных либо определенный путем анализа требований к тестируемой системе.
Никаких изменений программного кода, в том числе для исправления ошибок, не проводится.
Нагрузочные тесты проводятся на тестовом окружении, которое копирует рабочие условия:
  • тот же тип сервера, с аналогичными характеристиками;
  • та же скорость соединения;
  • база данных того же типа, что и на рабочем сервере;
  • аналогичные настройки серверного окружения и программного обеспечения.
Тестовый стенд — копия боевого сервера, размещенная на том же хостинге. Используется для проведения НТ, чтобы не нагружать основной сайт.
Цепочки — последовательность страниц, путь пользователей на сайте. Созданные цепочки должны покрыть собой все типы страниц и разделов на сайте.
Сценарии тестирования — список цепочек тестирования, используемых при нагрузочном тестировании. Создаются индивидуально для каждого проекта на основе шаблонов.
JMeter — программное обеспечение Apache JMeter, используемое для проведения тестирования. Сценарии тестирования заводятся в формате Jmeter.
Прогрев — предварительный запуск нагрузки. Используется для проверки работы в штатном режиме после запуска нагрузки.

Команда нагрузочного тестирования

  1. Системный администратор.
  2. Разработчик.
  3. Аналитик.
  4. Тестировщик.
Результатами тестирования являются:
  • измерение времени выполнения выбранных операций при определенных интенсивностях исполнения этих операций;
  • определение максимального числа пользователей, одновременно работающих в системе, с учетом критериев производительности;
  • определение границ приемлемой производительности при увеличении нагрузки (росте интенсивности выполнения этих операций).
Метрики производительности.
Метрики производительности

Как это работает

Тестирование нагрузки и производительности анализирует программное обеспечение, предназначенное для многопользовательской аудитории, путем использования ПО разным количеством виртуальных и живых пользователей при мониторинге показателей производительности и при различных нагрузках.
Процесс НТ проводится до релиза в тестовой среде, которая идентична производственной.
Почти все инструменты и фреймворки нагрузочного тестирования следуют классической парадигме нагрузочного тестирования: когда клиенты посещают ваш веб-сайт, специальное устройство записывает сообщение, а затем создает связанные скрипты взаимодействия.
Генератор нагрузки пытается воспроизвести записанные сценарии, которые, возможно, могут быть изменены с помощью различных параметров тестирования перед воспроизведением.
В процедуре воспроизведения проводником будет отслеживаться и собираться статистика как аппаратного, так и программного обеспечения, эта статистика включает процессор, память, время отклика, пропускную способность тестируемой системы (SUT) и т. д.
После чего вся эта статистика будет проанализирована, и будет сгенерирован отчет о нагрузочном тестировании.

Пример нагрузочного тестирования

Веб-сайт с функцией корзины необходим для поддержки 100 одновременных пользователей, которые выполняют следующие действия:
  • 25 виртуальных пользователей (VUsers) входят в систему, просматривают элементы и затем выходят из системы.
  • 25 VUsers входят в систему, добавляют товары в корзину, оформляют покупку и затем выходят из системы.
  • 25 VUsers входят в систему, возвращают ранее приобретенные товары и затем выходят из системы.
  • 25 VUsers просто входят в систему без каких-либо последующих действий.
Тестировщик может использовать различные инструменты нагрузочного тестирования для создания этих виртуальных пользователей и их действий. После запуска теста и достижения устойчивого состояния приложение тестируется при 100 нагрузках VUser, как описано выше. Затем производительность приложения можно отслеживать и фиксировать.
Время отклика сайта во время теста RPS=256
Время отклика сайта во время теста RPS=256
Все планы нагрузочного тестирования пытаются имитировать производительность системы в диапазоне ожидаемых пиковых рабочих процессов и объемов. Критерии прохождения или провала нагрузочного теста (pass/fail criteria), как правило, различаются и в разных организациях. Не существует стандартов, определяющих допустимые показатели производительности нагрузочного тестирования.

Зачем проводить нагрузочное тестирование сайта и архитектуры

В ходе нагрузочного тестирования производится сбор показателей и определение производительности и масштабируемости системы (сайта) посредством создания разных профилей нагрузки, которые она должна выдерживать. Для этого используется имитация работы пользователей, одновременно выполняющих в системе определенные операции.
Нагрузочное тестирование позволяет определить:
  1. Слабые места в коде и/или архитектуре.
2. Узкие места в системных настройках веб- и сервера баз данных.
3. Объем использования аппаратных компонентов сервера при нагрузке: процессора, оперативной памяти, системного диска, сетевого интерфейса.
4. Проблемы в программных компонентах: ошибки PHP-скриптов, медленные запросы к БД, некорректные ответы на запросы к страницам сайта.
5. Границы нагрузки, при которых система еще способна работать без ошибок.
6. Потенциальные проблемы со стабильностью системы при длительной работе под интенсивной нагрузкой.
7. Методы дальнейшего масштабирования и оптимизации ресурса.
Загрузка сервера БД на 100%
Загрузка сервера БД на 100%

Этапы тестирования

1. Сбор и анализ предварительной информации.
Агрегировать и изучить данные веб-аналитики, лог-файлы PHP и MySQL, показатели стабильности «Битрикс», документацию по проекту, техническое задание от клиента и прочее.
2. Установление целей и типов нагрузочного тестирования.
Выявить слабые места в коде и архитектуре, определить границы нагрузки, потенциальные проблемы со стабильностью при длительной работе под нагрузкой, методы дальнейшей оптимизации и масштабирования.
3. Определение ожидаемой нагрузки.
Установить желаемое количество одновременных запросов, транзакций и пользователей, которые система должна обработать.
4. Настройка тестовой среды.
Подготовить тестовые серверы, инструменты тестирования, иные программные и аппаратные ресурсы.
5. Выбор сценариев теста.
Определить сценарии, которые будут имитировать нагрузку на систему, куда входят все шаги, которые будут выполнять пользователи, а также все типы запросов к системе, а также их количество — RPS.
6. Создание виртуальных пользователей.
Создать инжекторы нагрузки, которыми являются виртуальные пользователи, имитирующие реальных пользователей в системе.
7. Прогрев системы.
Предварительный запуск нагрузки, подготовка к непосредственному нагрузочному тестированию.
8. Выполнение тестов.
Запустить тест, отслеживать производительность системы и нужные метрики.
9. Анализ результатов.
Проанализировать результаты НТ согласно выбранным метрикам.
10. Создание отчета.
Собрать количественные и качественные данные, статистику по выбранным метрикам, результаты анализа и рекомендации.
11. Точная настройка системы.
Внести изменения в настройку производительности, чтобы улучшить ее способность справляться с ожидаемыми нагрузками.

Сбор и анализ предварительной информации

  1. Данные аналитики «Яндекс.Метрики» и Google Analytics: посещаемость сайта, источники трафика, устройства, число уникальных пользователей.
  2. Лог-файлы: PHP, MySQL, показатели стабильности «Битрикс».
  3. Документация по проекту, ТЗ от клиента и т. п.
Сбор и анализ предварительной информации в Яндекс Метрике
По итогам анализа делаем выводы.
Пример.
Сбор и анализ предварительной информации

Подготовка тестового стенда

В качестве тестового стенда должен использоваться боевой сервер (предпочтительный вариант) или копия боевого сервера, размещенная на том же хостинге. Также должна быть проведена проверка системы Bitrix. А системный администратор должен убедиться, что сервер в рабочем состоянии: имеется свободное место на диске, память и процессор не перегружены.
На тестовом стенде в административной панели должны быть выполнены настройки:
  1. Отключена опция блокировки пользователя при большом количестве соединений в настройках модуля «Веб-аналитика», вкладка «Настройка», секция «Ограничение активности».
  2. Отключен «Контроль активности» в настройках модуля «Проактивная защита».
Кроме того, разработчик на данном этапе должен проверить наличие внешних подключений (DaData, Google ReCaptcha), которые могут оказать дополнительную нагрузку, которая не зависит от проверяемого сайта, и отключить их.
А также создать CSV-файлы со следующими данными:
  • свойства оформления заказа;
  • свойства для поиска, фильтрации и сортировки;
  • тестовые пользователи, которые создаются при помощи скрипта.
Эти данные нужны для сбора статистики и последующего анализа.

Сценарии нагрузочного тестирования

Нагрузочное тестирование — это способ выявить слабые места, которые могут подвести в случаях, когда нагрузка на ресурс возрастет.
В зависимости от целей тестирования моделируют различные ситуации, например:
  • количество пользователей резко и неожиданно выросло;
  • на сайт поступило множество запросов с одного IP-адреса;
  • наплыв новых пользователей, которые хотят зарегистрироваться;
  • количество посетителей растет плавно, но непрерывно и каждую минуту;
  • большинство посетителей пытается воспользоваться одной и той же услугой;
  • на сайт пришло большое количество посетителей, у которых медленный интернет.
Перед началом тестирования определяются его цели и задачи, например:
  • проверить, что сайт не откажется работать, если на него зайдет сразу 500 тысяч человек;
  • выяснить время отклика базы данных при постоянном росте количества запросов — RPS;
  • проверить работоспособность сервера, если количество посетителей вырастет в 10 раз;
  • измерить среднее время отклика сайта, если посетителей станет больше в 5 раз;
  • узнать расход памяти и нагрузку процессора при реализации различных сценариев.
Сценарии создаются индивидуально для каждого проекта и зависят от моделирования ситуаций. Как правило, пиковые нагрузки возникают в периоды маркетинговых активностей: массовых акций, сезонных скидок, розыгрышей и конкурсов.
Сразу все сценарии проверить невозможно, поэтому тестирование проводится поэтапно, для чего используются разные инструменты тестирования и типы тестов.

Создание сценариев тестирования

Для проведения нагрузочного тестирования разработчиком создаются сценарии — цепочки тестирования.
Цепочки составляются на основе:
  • Данных из аналитики: отчеты в «Яндекс.Метрике» — «Страницы входа» и «Популярные страницы».
  • Данных из логов веб-сервера Nginx: список самых посещаемых страниц.
  • Типичных путей пользователей на сайте, например: «Детальная страница товара — Корзина — Оформление заказа».
На основе этих данных разработчик определяет стандартную нагрузку на сайте (условные 100% от нагрузки), а также количество запросов и пользователей для повышения нагрузки на каждом из этапов нагрузочного тестирования.
Состав цепочек:
Минимальный состав цепочек должен включать в себя заходы:
  1. На «Главную».
  2. В «Список товаров» (раздел).
  3. В «Карточку товара».
  4. На страницу «Корзины» с большим количеством товаров.
  5. На страницу «Корзины» с небольшим количеством товаров.
  6. На страницу «Оформления заказа».
  7. На страницы «Личного кабинета».
  8. На последнюю страницу в «Списке товаров» (постраничная навигация).
  9. На контентные страницы, страницы блога, в новости, статьи и т. п.
Созданные цепочки должны покрыть собой все типы страниц и разделов на сайте, уделяя особое внимание страницам с наибольшим количеством посещений.
Пример.
Создание сценариев тестирования

Предварительный запуск нагрузки

Прогрев сервера перед нагрузочным тестом, не менее 1 часа. Нагрузка 75% от максимального количества хитов в секунду.
После запуска нагрузки важно проверить, чтобы система работала в штатном режиме и не перегружена ли текущая веб-система:
  1. Имеются свободные процессы веб-сервера (Apache, PHP-FPM), MySQL.
  2. Лог медленных запросов не растет.
  3. Аппаратная часть (CPU, memory, disk, network) не перегружена.
Когда проходит около 30 минут с начала прогрева тестировщики должны проверить работоспособность основных систем сайта, особое внимание уделяя страницам, отмеченным клиентом и/или наибольшей активностью.
В случае обнаружения проблем с сайтом прогрев останавливается, и разработчик совместно с системным администратором проверяют данные ошибки.

Непосредственное проведение тестирования

Запуск нагрузочного тестирования осуществляется при помощи сервиса Yandex Load Testing.
Созданные ранее в JMeter сценарии должны быть загружены в данный сервис системным администратором. Нагрузку на сервер необходимо оценивать с помощью системы мониторинга Zabbix. Продолжительность каждого теста с увеличением нагрузки после прогрева — 15 минут.
В процессе проведения тестирования системный администратор должен мониторить показатели сервера. Для мониторинга нагрузки на процессор, память, сетевой трафик и запущенных на нем служб используются сервисы Zabbix и ELK.
Помимо этого, системный администратор сигнализирует тестировщикам о прохождении нагрузки кратной 100% — то есть 200% нагрузки, 300% и так далее.
На данных реперных точках тестировщики должны проверить работоспособность основных систем сайта, особое внимание уделяя страницам, отмеченным клиентом и/или наибольшей активностью.
В случае же обнаружения проблем с сайтом тестировщик сообщает о них системному администратору, но тест не прекращается. Тест может прекратиться только в случае полного отказа сайта и/или сервера.

Виды нагрузочного тестирования

Нагрузочное тестирование (Load Testing)

Задачи: сбор показателей, определение производительности и масштабируемости системы или приложения посредством создания разных профилей нагрузки, которые она должна выдерживать. Для этого используется имитация работы пользователей, одновременно выполняющих в системе определенные операции.
Примечание: нагрузка увеличивается до 300% (количество пользователей и хитов), тест проводится на мобильных и десктопах (исходя из аналитики), затем проводится откат до 100–150% и в Zabbix наблюдается, как восстанавливается система, фиксируются отклонения от нормы.
Цель: получение данных по работе сервера при создании определенных нагрузок.
Результат Load Testing:
  • Измерение времени выполнения выбранных операций при различной интенсивности их выполнения.
  • Определение максимального числа пользователей, одновременно работающих в системе, с учетом критериев производительности.
  • Потенциальные проблемы со стабильностью системы при длительной работе под интенсивной нагрузкой.
  • Методы дальнейшего масштабирования и оптимизации.

Стрессовое тестирование Stress Testing

Задачи: проверка работоспособности системы при длительном тестировании со средним уровнем нагрузки.
Время выполнения операций может играть в стресс тесте сайта второстепенную роль. При этом на первое место выходят отсутствие утечек памяти, перезапусков серверов под нагрузкой и другие аспекты, влияющие именно на стабильность работы.
Примечание: дается нагрузка в 150% от пика и тестируется в течение 12 часов, в процессе идет наблюдение, как система себя ведет при длительных нагрузках.
Цель:
  • Обнаружение возможных утечек памяти, повреждения данных, а также выявление некорректных обработок ошибок и исключительных ситуаций.
  • Получение данных по работе системы при создании определенных нагрузок.
Результат Stress Testing:
  • Получение пороговых значений, при которых происходит «падение сервера». То есть определение максимальной нагрузки на сервер.
  • Определение той величины нагрузки, при которой возможна оптимальная работа сервера в течение продолжительного периода.

Тестирование стабильности — Stability Testing

Задачи: проверка работоспособности системы при многочасовом тестировании со средним уровнем нагрузки.
Время выполнения операций может играть в данном виде тестирования второстепенную роль. При этом на первое место выходят отсутствие утечек памяти, перезапусков серверов под нагрузкой и другие аспекты, влияющие именно на стабильность работы.
Цель: получение данных о работе системы при создании определенных нагрузок.
Результат Stability Testing:
Определение той величины нагрузки, при которой возможна оптимальная работа сервера в течение продолжительного периода.

Результаты тестирования, их оценка и рекомендации

  1. Представление результатов тестирования в виде графиков, таблиц, их короткое описание.
Пример.
Представление результатов тестирования в виде графиков, таблиц, их короткое описание
2. Выводы: как ведёт себя сайт в зависимости от нагрузки.
Пример из отчета.
Выводы: как ведёт себя сайт в зависимости от нагрузки
На основе результатов и выводов.
  1. Даем рекомендации по результатам тестирования.
  2. Указываем на рекомендуемые правки в архитектуре сервера и/или сайта.
  3. Рекомендуем доработки, которые необходимы, чтобы сайт стал работать лучше.
Пример.
Даем рекомендации по результатам тестирования

Инструменты нагрузочного тестирования

Для каждого вида нагрузочного тестирования подбираются инструменты, которые позволяют смоделировать ситуацию и измерить необходимые метрики. Но в целом используется базовый набор, вот самые популярные инструменты.
Apache JMeter — мощный и удобный инструмент для проведения нагрузочного тестирования. Позволяет моделировать нагрузку по большинству интернет-протоколов и поддерживает виртуальную авторизацию на сайтах. Для расширения функциональности можно использовать дополнительные плагины.
Результаты выводятся в графическом виде:
Интерфейс программы Apache JMeter
Интерфейс программы
Возможности программы:
  • Написан на Java, кроссплатформенная работа.
  • Использует много протоколов веб-серверов и баз: HTTP, HTTPS, SOAP, Database via JDBC, LDAP, SMTP(S), POP3(S), IMAP(S).
  • Управляется через консоль и GUI.
  • Использует распределенное тестирование.
  • План тестирования — XML-файл.
  • Может обрабатывать лог веб-сервера, как план тестирования.
  • Визуализация результатов в GUI.
Процесс тестирования в Apache JMeter
Процесс тестирования в Apache JMeter
Zabbix — свободно распространяемая система для мониторинга состояния серверов, компьютерных сетей и различного оборудования. Результаты проверки выводятся в графическом виде.
Интерфейс программы Zabbix
Интерфейс программы Zabbix
На графике CPU usage наблюдаем по вертикальной шкале данные по загрузке процессора в пределах 25% — это норма. В случае если процессор загружен более чем на 90% процентов, то возможны проблемы при работе с сайтом.
График загрузки центрального процессора
График загрузки центрального процессора
С помощью Zabbix также можно отслеживать время отклика главной страницы сайта.
График «Время отклика главной страницы»
График «Время отклика главной страницы»
Инструмент предоставляет информацию о занятом дисковом пространстве.
График Disk space usage
График Disk space usage
Yandex Load Testing — сервис, который позволяет проводить нагрузочное тестирование, чтобы анализировать производительность приложений и сервисов.
С его помощью можно:
  1. Создать в своем облаке заранее настроенный генератор нагрузки.
  2. Сконфигурировать тест в интерфейсе и подать нагрузку с созданного генератора.
  3. Посмотреть отчет о проведенном тесте.
  4. Хранить ранее проведенные отчеты и управлять ими.
Управление сервисом происходит через консоль.
Процесс тестирования с помощью Yandex Load Testing
Процесс тестирования с помощью Yandex Load Testing

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

  1. По итогам анализа вы получите текстовый документ, который содержит количественные и качественные данные, собранные в процессе анализа, выводы и рекомендации.
  2. Сформируете целостную картину проблем в серверной архитектуре.
  3. Поймете, за счет каких действий повысить стабильность системы при высоких нагрузках.
  4. Подготовите список действительно важных задач для развития проекта и распределите их по приоритету.

Стоимость и сроки нагрузочного тестирования

Список работ:
  1. Подготовка данных и метрик для создания тестов.
  2. Создание и настройка клона сервера (опционально).
  3. Настройка мониторинга сервера.
  4. Настройка агентов тестирования Yandex Load Testing.
  5. Подготовка тестов (4 цепочки).
  6. Запуск нагрузки, фиксирование результатов.
  7. Анализ полученных данных и составление отчета.
  8. Тесты базового функционала во время и после проведения нагрузочного тестирования.
  9. Составление отчета о результатах с рекомендациями по решению выявленных проблем.
Сроки — от 36 часов команды разработки.

В каких случаях стоит проводить нагрузочное тестирование

  1. Выпуск нового продукта или запуск проекта.
  2. Импортозамещение или доработка эксплуатируемого ПО.
  3. Изменение конфигурации стендов.
  4. Принятие в эксплуатацию нового ПО.
  5. Запуск новых сервисов.
  6. Оценка возможностей существующей системы.
  7. Запуск рекламных кампаний.
Применение рекомендаций обеспечит вам:
  • оптимальную производительность и повышение эффективности;
  • конкурентное преимущество за счет безотказной работы;
  • снижение рисков простоя ресурса, потенциальных проблем с производительностью и безопасностью.
Проверка ресурса с помощью нагрузочного тестирования — это гарантия стабильности и надежности работы ваших ресурсов и систем.
Получайте полезный контент от KISLOROD в любой из мессенджеров
При переходе в одну из указанных социальных сетей, вы автоматически соглашаетесь с политикой конфиденциальности
Спасибо, что дочитали до конца.
Если информация была полезна, поделитесь статьёй. Вам не сложно, нам приятно ;)

Рекомендованные статьи

Скачайте 17 точек роста и 100 + чекеров для роста конверсии и прибыли интернет-магазина
При переходе в одну из указанных социальных сетей, вы автоматически соглашаетесь с политикой конфиденциальности
Мы проанализировали ведущие интернет-магазины, результаты исследований, свой опыт и собрали важные моменты в одно руководство. Делаем e-commerce лучше, поэтому не только пользуемся сами, но и делимся с вами.
Выберите удобный мессенджер и получите чек-лист прямо сейчас: