В статье разберем, что такое нагрузочное тестирование, какую пользу приносят тесты, из чего состоят и что проверяют. Рассмотрим варианты нагрузки и процесс тестирования поэтапно.
Нагрузочное тестирование, НТ — процесс систематической проверки и анализа программного обеспечения на соответствие нефункциональным требованиям с помощью предопределенной нагрузки и специализированных инструментов.
Предопределенная нагрузка — нагрузка, которая подается в процентном соотношении от профиля нагрузочного тестирования.
Профиль нагрузочного тестирования — набор сценариев с заданной интенсивностью, которые были определены путем анализа требований к тестируемой системе, либо получены на основе сбора статистических данных.
С помощью тестов оценивается производительность и время отклика сайта при различных нагрузках. Они имитируют увеличение числа посетителей, чтобы оценить, как сайт справится с дополнительной нагрузкой и будет обрабатывать запросы RPS.
Время отклика сайта во время теста РПС=262
RPS (request per second) — число запросов в секунду на страницы сайта, которые производили при нагрузочном тестировании. Показывает примерное количество запросов, после которого был прерван тест — либо из-за отсутствия ответа по сети, либо из-за ошибок в HTTP запросах.
Одни из показателей, который получают при НТ и используют для дальнейшего анализа — это показатели производительности.
Производительность — мера того, как хорошо и насколько эффективно система выполняет поставленные перед ней задачи.
В рамках проверки производительности НТ позволяет решить следующие задачи:
определить объем утилизации памяти — memory leak;
определить время отклика при различных нагрузках;
прогнозировать производительность при различных условиях;
моделировать производительность ресурса;
найти узкие места и определить пропускную способность системы;
определить пиковую производительность системы — peak perf.
Нагрузочное тестирование также может проверить масштабируемость ресурса, надежность работы и доступность при стандартных нагрузках.
Как проводится нагрузочное тестирование
Процесс тестирования — специалисты подключаются к сайту и запускают определенный набор сценариев с заданными интенсивностями, полученный на основе сбора статистических данных либо определенный путем анализа требований к тестируемой системе.
Никаких изменений программного кода, в том числе для исправления ошибок, не проводится.
Нагрузочные тесты проводятся на тестовом окружении, которое копирует рабочие условия:
тот же тип сервера, с аналогичными характеристиками;
та же скорость соединения;
база данных того же типа, что и на рабочем сервере;
аналогичные настройки серверного окружения и программного обеспечения.
Тестовый стенд — копия боевого сервера, размещенная на том же хостинге. Используется для проведения НТ, чтобы не нагружать основной сайт.
Цепочки — последовательность страниц, путь пользователей на сайте. Созданные цепочки должны покрыть собой все типы страниц и разделов на сайте.
Сценарии тестирования — список цепочек тестирования, используемых при нагрузочном тестировании. Создаются индивидуально для каждого проекта на основе шаблонов.
JMeter — программное обеспечение Apache JMeter, используемое для проведения тестирования. Сценарии тестирования заводятся в формате Jmeter.
Прогрев — предварительный запуск нагрузки. Используется для проверки работы в штатном режиме после запуска нагрузки.
Команда нагрузочного тестирования
Системный администратор.
Разработчик.
Аналитик.
Тестировщик.
Результатами тестирования являются:
измерение времени выполнения выбранных операций при определенных интенсивностях исполнения этих операций;
определение максимального числа пользователей, одновременно работающих в системе, с учетом критериев производительности;
определение границ приемлемой производительности при увеличении нагрузки (росте интенсивности выполнения этих операций).
Метрики производительности.
Как это работает
Тестирование нагрузки и производительности анализирует программное обеспечение, предназначенное для многопользовательской аудитории, путем использования ПО разным количеством виртуальных и живых пользователей при мониторинге показателей производительности и при различных нагрузках.
Процесс НТ проводится до релиза в тестовой среде, которая идентична производственной.
Почти все инструменты и фреймворки нагрузочного тестирования следуют классической парадигме нагрузочного тестирования: когда клиенты посещают ваш веб-сайт, специальное устройство записывает сообщение, а затем создает связанные скрипты взаимодействия.
Генератор нагрузки пытается воспроизвести записанные сценарии, которые, возможно, могут быть изменены с помощью различных параметров тестирования перед воспроизведением.
В процедуре воспроизведения проводником будет отслеживаться и собираться статистика как аппаратного, так и программного обеспечения, эта статистика включает процессор, память, время отклика, пропускную способность тестируемой системы (SUT) и т. д.
После чего вся эта статистика будет проанализирована, и будет сгенерирован отчет о нагрузочном тестировании.
Пример нагрузочного тестирования
Веб-сайт с функцией корзины необходим для поддержки 100 одновременных пользователей, которые выполняют следующие действия:
25 виртуальных пользователей (VUsers) входят в систему, просматривают элементы и затем выходят из системы.
25 VUsers входят в систему, добавляют товары в корзину, оформляют покупку и затем выходят из системы.
25 VUsers входят в систему, возвращают ранее приобретенные товары и затем выходят из системы.
25 VUsers просто входят в систему без каких-либо последующих действий.
Тестировщик может использовать различные инструменты нагрузочного тестирования для создания этих виртуальных пользователей и их действий. После запуска теста и достижения устойчивого состояния приложение тестируется при 100 нагрузках VUser, как описано выше. Затем производительность приложения можно отслеживать и фиксировать.
Время отклика сайта во время теста RPS=256
Все планы нагрузочного тестирования пытаются имитировать производительность системы в диапазоне ожидаемых пиковых рабочих процессов и объемов. Критерии прохождения или провала нагрузочного теста (pass/fail criteria), как правило, различаются и в разных организациях. Не существует стандартов, определяющих допустимые показатели производительности нагрузочного тестирования.
Зачем проводить нагрузочное тестирование сайта и архитектуры
В ходе нагрузочного тестирования производится сбор показателей и определение производительности и масштабируемости системы (сайта) посредством создания разных профилей нагрузки, которые она должна выдерживать. Для этого используется имитация работы пользователей, одновременно выполняющих в системе определенные операции.
Нагрузочное тестирование позволяет определить:
Слабые места в коде и/или архитектуре.
2. Узкие места в системных настройках веб- и сервера баз данных.
3. Объем использования аппаратных компонентов сервера при нагрузке: процессора, оперативной памяти, системного диска, сетевого интерфейса.
4. Проблемы в программных компонентах: ошибки PHP-скриптов, медленные запросы к БД, некорректные ответы на запросы к страницам сайта.
5. Границы нагрузки, при которых система еще способна работать без ошибок.
6. Потенциальные проблемы со стабильностью системы при длительной работе под интенсивной нагрузкой.
7. Методы дальнейшего масштабирования и оптимизации ресурса.
Загрузка сервера БД на 100%
Этапы тестирования
1. Сбор и анализ предварительной информации.
Агрегировать и изучить данные веб-аналитики, лог-файлы PHP и MySQL, показатели стабильности «Битрикс», документацию по проекту, техническое задание от клиента и прочее.
2. Установление целей и типов нагрузочного тестирования.
Выявить слабые места в коде и архитектуре, определить границы нагрузки, потенциальные проблемы со стабильностью при длительной работе под нагрузкой, методы дальнейшей оптимизации и масштабирования.
3. Определение ожидаемой нагрузки.
Установить желаемое количество одновременных запросов, транзакций и пользователей, которые система должна обработать.
4. Настройка тестовой среды.
Подготовить тестовые серверы, инструменты тестирования, иные программные и аппаратные ресурсы.
5. Выбор сценариев теста.
Определить сценарии, которые будут имитировать нагрузку на систему, куда входят все шаги, которые будут выполнять пользователи, а также все типы запросов к системе, а также их количество — RPS.
6. Создание виртуальных пользователей.
Создать инжекторы нагрузки, которыми являются виртуальные пользователи, имитирующие реальных пользователей в системе.
7. Прогрев системы.
Предварительный запуск нагрузки, подготовка к непосредственному нагрузочному тестированию.
8. Выполнение тестов.
Запустить тест, отслеживать производительность системы и нужные метрики.
9. Анализ результатов.
Проанализировать результаты НТ согласно выбранным метрикам.
10. Создание отчета.
Собрать количественные и качественные данные, статистику по выбранным метрикам, результаты анализа и рекомендации.
11. Точная настройка системы.
Внести изменения в настройку производительности, чтобы улучшить ее способность справляться с ожидаемыми нагрузками.
Сбор и анализ предварительной информации
Данные аналитики «Яндекс.Метрики» и Google Analytics: посещаемость сайта, источники трафика, устройства, число уникальных пользователей.
В качестве тестового стенда должен использоваться боевой сервер (предпочтительный вариант) или копия боевого сервера, размещенная на том же хостинге. Также должна быть проведена проверка системы Bitrix. А системный администратор должен убедиться, что сервер в рабочем состоянии: имеется свободное место на диске, память и процессор не перегружены.
На тестовом стенде в административной панели должны быть выполнены настройки:
Отключена опция блокировки пользователя при большом количестве соединений в настройках модуля «Веб-аналитика», вкладка «Настройка», секция «Ограничение активности».
Отключен «Контроль активности» в настройках модуля «Проактивная защита».
Кроме того, разработчик на данном этапе должен проверить наличие внешних подключений (DaData, Google ReCaptcha), которые могут оказать дополнительную нагрузку, которая не зависит от проверяемого сайта, и отключить их.
А также создать CSV-файлы со следующими данными:
свойства оформления заказа;
свойства для поиска, фильтрации и сортировки;
тестовые пользователи, которые создаются при помощи скрипта.
Эти данные нужны для сбора статистики и последующего анализа.
Сценарии нагрузочного тестирования
Нагрузочное тестирование — это способ выявить слабые места, которые могут подвести в случаях, когда нагрузка на ресурс возрастет.
В зависимости от целей тестирования моделируют различные ситуации, например:
количество пользователей резко и неожиданно выросло;
на сайт поступило множество запросов с одного IP-адреса;
наплыв новых пользователей, которые хотят зарегистрироваться;
количество посетителей растет плавно, но непрерывно и каждую минуту;
большинство посетителей пытается воспользоваться одной и той же услугой;
на сайт пришло большое количество посетителей, у которых медленный интернет.
Перед началом тестирования определяются его цели и задачи, например:
проверить, что сайт не откажется работать, если на него зайдет сразу 500 тысяч человек;
выяснить время отклика базы данных при постоянном росте количества запросов — RPS;
проверить работоспособность сервера, если количество посетителей вырастет в 10 раз;
измерить среднее время отклика сайта, если посетителей станет больше в 5 раз;
узнать расход памяти и нагрузку процессора при реализации различных сценариев.
Сценарии создаются индивидуально для каждого проекта и зависят от моделирования ситуаций. Как правило, пиковые нагрузки возникают в периоды маркетинговых активностей: массовых акций, сезонных скидок, розыгрышей и конкурсов.
Сразу все сценарии проверить невозможно, поэтому тестирование проводится поэтапно, для чего используются разные инструменты тестирования и типы тестов.
Создание сценариев тестирования
Для проведения нагрузочного тестирования разработчиком создаются сценарии — цепочки тестирования.
Цепочки составляются на основе:
Данных из аналитики: отчеты в «Яндекс.Метрике» — «Страницы входа» и «Популярные страницы».
Данных из логов веб-сервера Nginx: список самых посещаемых страниц.
Типичных путей пользователей на сайте, например: «Детальная страница товара — Корзина — Оформление заказа».
На основе этих данных разработчик определяет стандартную нагрузку на сайте (условные 100% от нагрузки), а также количество запросов и пользователей для повышения нагрузки на каждом из этапов нагрузочного тестирования.
Состав цепочек:
Минимальный состав цепочек должен включать в себя заходы:
На «Главную».
В «Список товаров» (раздел).
В «Карточку товара».
На страницу «Корзины» с большим количеством товаров.
На страницу «Корзины» с небольшим количеством товаров.
На страницу «Оформления заказа».
На страницы «Личного кабинета».
На последнюю страницу в «Списке товаров» (постраничная навигация).
На контентные страницы, страницы блога, в новости, статьи и т. п.
Созданные цепочки должны покрыть собой все типы страниц и разделов на сайте, уделяя особое внимание страницам с наибольшим количеством посещений.
Пример.
Предварительный запуск нагрузки
Прогрев сервера перед нагрузочным тестом, не менее 1 часа. Нагрузка 75% от максимального количества хитов в секунду.
После запуска нагрузки важно проверить, чтобы система работала в штатном режиме и не перегружена ли текущая веб-система:
Имеются свободные процессы веб-сервера (Apache, PHP-FPM), MySQL.
Лог медленных запросов не растет.
Аппаратная часть (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:
Определение той величины нагрузки, при которой возможна оптимальная работа сервера в течение продолжительного периода.
Результаты тестирования, их оценка и рекомендации
Представление результатов тестирования в виде графиков, таблиц, их короткое описание.
Пример.
2. Выводы: как ведёт себя сайт в зависимости от нагрузки.
Пример из отчета.
На основе результатов и выводов.
Даем рекомендации по результатам тестирования.
Указываем на рекомендуемые правки в архитектуре сервера и/или сайта.
Рекомендуем доработки, которые необходимы, чтобы сайт стал работать лучше.
Пример.
Инструменты нагрузочного тестирования
Для каждого вида нагрузочного тестирования подбираются инструменты, которые позволяют смоделировать ситуацию и измерить необходимые метрики. Но в целом используется базовый набор, вот самые популярные инструменты.
Apache JMeter — мощный и удобный инструмент для проведения нагрузочного тестирования. Позволяет моделировать нагрузку по большинству интернет-протоколов и поддерживает виртуальную авторизацию на сайтах. Для расширения функциональности можно использовать дополнительные плагины.
Результаты выводятся в графическом виде:
Интерфейс программы
Возможности программы:
Написан на Java, кроссплатформенная работа.
Использует много протоколов веб-серверов и баз: HTTP, HTTPS, SOAP, Database via JDBC, LDAP, SMTP(S), POP3(S), IMAP(S).
Управляется через консоль и GUI.
Использует распределенное тестирование.
План тестирования — XML-файл.
Может обрабатывать лог веб-сервера, как план тестирования.
Визуализация результатов в GUI.
Процесс тестирования в Apache JMeter
Zabbix — свободно распространяемая система для мониторинга состояния серверов, компьютерных сетей и различного оборудования. Результаты проверки выводятся в графическом виде.
Интерфейс программы Zabbix
На графике CPU usage наблюдаем по вертикальной шкале данные по загрузке процессора в пределах 25% — это норма. В случае если процессор загружен более чем на 90% процентов, то возможны проблемы при работе с сайтом.
График загрузки центрального процессора
С помощью Zabbix также можно отслеживать время отклика главной страницы сайта.
График «Время отклика главной страницы»
Инструмент предоставляет информацию о занятом дисковом пространстве.
График Disk space usage
Yandex Load Testing — сервис, который позволяет проводить нагрузочное тестирование, чтобы анализировать производительность приложений и сервисов.
С его помощью можно:
Создать в своем облаке заранее настроенный генератор нагрузки.
Сконфигурировать тест в интерфейсе и подать нагрузку с созданного генератора.
Посмотреть отчет о проведенном тесте.
Хранить ранее проведенные отчеты и управлять ими.
Управление сервисом происходит через консоль.
Процесс тестирования с помощью Yandex Load Testing
На какой результат можно рассчитывать после проведения нагрузочного тестирования
По итогам анализа вы получите текстовый документ, который содержит количественные и качественные данные, собранные в процессе анализа, выводы и рекомендации.
Сформируете целостную картину проблем в серверной архитектуре.
Поймете, за счет каких действий повысить стабильность системы при высоких нагрузках.
Подготовите список действительно важных задач для развития проекта и распределите их по приоритету.
Скачайте 17 точек роста и 100 + чекеров для роста конверсии и прибыли интернет-магазина
При переходе в одну из указанных социальных сетей, вы автоматически соглашаетесь с политикой конфиденциальности
Мы проанализировали ведущие интернет-магазины, результаты исследований, свой опыт и собрали важные моменты в одно руководство. Делаем e-commerce лучше, поэтому не только пользуемся сами, но и делимся с вами.
Выберите удобный мессенджер и получите чек-лист прямо сейчас: