При разработке любого программного продукта важно понимать, как быстро он способен выполнять различные операции и как изменится поведение продукта с ростом нагрузки на сервер.
Иначе вполне вероятно, что в наиболее неподходящий момент — например, когда удачная рекламная кампания приведет на ресурс сразу 100 или 1000 пользователей, готовых оформить заказ, — система даст сбой и не сможет обработать важные запросы.
Предотвратить подобного рода ситуации и измерить лимиты производительности поможет
тестирование производительности программного обеспечения.
Важное условие: при тестировании должны учитываться реальные сценарии поведения ваших пользователей. Только так результаты измерения будут действительно информативными.
3 вопроса, ответы на которые помогут составить объективные шаблоны пользовательского поведения:
- Каково общее количество пользователей (в час, в день, в месяц, в год), взаимодействующих с вашим приложением?
- Сколько пользователей единовременно используют приложение во время его наибольшей загруженности?
- Какие действия выполняют эти пользователи и как часто?
Чтобы ответить на эти вопросы, придется изучить статистические данные, собранной веб-аналитическими инструментами (например, Google Analytics).
Так, статистика о посещении интернет-магазина в обычный период и в период сезонных распродаж позволяет спрогнозировать ожидаемый уровень нагрузки в конце будущего сезона. Тестирование производительности, в свою очередь, может предсказать, как быстро система будет реагировать на действия пользователей при ожидаемой пиковой нагрузке, найти «узкие» места и повысить эффективность, например, за счет оптимизации настроек окружения.
Разработка скриптов для нагрузочного тестирования
Анализ частоты выполнения операций и создаваемой на сайт нагрузки дает возможность выделить ключевые бизнес-транзакции и составить тестовые сценарии поведения пользователей, в соответствии с которыми разрабатываются нагрузочные скрипты.
Разработка скриптов осуществляется с помощью инструментов нагрузочного тестирования, которые позволяют записать процесс обмена данными между сервером и браузером пользователя на уровне протокола (чаще всего HTTP(S)) и впоследствии воспроизвести этот процесс с учетом логики корреляции динамических параметров.
Во время разработки сетевой трафик, генерируемый нагрузочными скриптами, тщательно сверяется с трафиком браузера пользователя. Это позволяет избежать ошибок в работе скриптов.
На финальном этапе разработки настраивается профиль нагрузки, отражающий процентное распределение совершаемых в системе операций между пользователями разных ролей. Запуск разработанных скриптов в несколько потоков позволяет сгенерировать необходимую нагрузку на систему.
Нужна помощь?
Закажите консультацию по тестированию производительности вашего продукта.
Тестирование производительности
Рассмотрим ключевые характеристики, измеряемые во время тестов производительности.
Когда пользователь вводит в окне браузера адрес веб-сайта, он отправляет запрос на сервер, который в свою очередь его обрабатывает и посылает в ответ код запрашиваемой страницы. Время, затраченное на прохождение пакета информации, отправленного клиентом серверу, и получение последнего байта информации называется временем отклика сервера.
Как правило, допустимое значение времени отклика не должно превышать двух секунд. Однако это значение может варьироваться в зависимости от категории веб-сайта.
Например, одними из наиболее требовательных систем к времени отклика являются игровые онлайн-порталы. Считается, что для комфортной игры среднее время отклика не должно превышать 50 миллисекунд. Напротив, время отклика сервера при генерации годового отчета банковской системы может достигать 30 секунд и считаться абсолютно допустимым.
Еще одной важной характеристикой производительности является количество хитов (запросов) в секунду. В процессе тестирования инструмент нагрузочного тестирования измеряет количество успешно обработанных запросов, отправленных на сервер. В результате можно определить соответствует ли пропускная способность сервера установленным требованиям производительности. Количество запросов в секунду может варьироваться от нескольких десятков, до нескольких тысяч десятков запросов, легко обрабатываемых, к примеру, крупными поисковыми системами.
Часто при выполнении действия на сайте, например, авторизации, пользователь отправляет несколько запросов. Для того, чтобы оценить скорость выполнения такого действия, при разработке скриптов, запросы объединяются в одну общую транзакцию. Количество успешно завершенных действий в секунду времени определяется количеством транзакций в секунду. Выделение отдельных бизнес-транзакций является чрезвычайно важным для анализа производительности приложения.
Приведенные метрики производительности находятся в прямой корреляции с ростом нагрузки или числа пользователей, взаимодействующих с приложением. Способность системы справляться с ожидаемым уровнем нагрузки тестируется путем эмуляции виртуальными пользователями работы реальных пользователей. В случае, если в работе скриптов отсутствуют ошибки, виртуальные пользователи с точностью повторяют действия реальных.
Увеличение количества пользователей также зачастую сопровождается появлением ошибок HTTP. Во время запуска тестов отслеживается не только число возникающих ошибок, но и их типы. Допустимое количество ошибок составляет менее одного процента от общего числа запросов. Помимо ошибок HTTP также отлавливаются ошибки в логах веб-сервера, базы данных и операционной системы.
В дополнение к приведенным метрикам производительности во время запусков тестов анализируется потребление аппаратных ресурсов серверов системы: процессора, оперативной памяти, жесткого диска и сети.
По мере выполнения тестов готовится отчет по тестированию производительности, который включает в себя данные о времени отклика для наиболее важных бизнес-транзакций, графики, показывающие зависимость измеренных метрик от количества виртуальных пользователей, выводы о производительности системы в целом и рекомендации по ее улучшению.
Виды тестирования производительности
В настоящее время тестирование производительности чаще всего осуществляется двумя способами. В основе первого, профессионального способа, лежит воспроизведение работы реальных пользователей путем запуска разработанных нагрузочных скриптов в несколько потоков. Второй способ тестирования, непрофессиональный, проводится с применением онлайн-сервисов для генерации статической нагрузки.
В результате профессиональное тестирование позволяет обнаружить функциональные дефекты, проявляющиеся только при нагрузке. Разработка скриптов в соответствии с действиями реальных пользователей дает возможность максимально точно локализовать возможный дефект. Тесты производительности также могут выявить ряд дефектов, с трудом уловимых функциональным тестированием, например, отсутствие или некорректную работу элементов на странице веб-сайта. Онлайн-сервисы для генерации статической нагрузки не позволяют добиться таких результатов.
Одними из существенных аспектов тестирования производительности являются анализ и интерпретация полученных результатов.
Послесловие
Грамотный подход к
тестированию производительности опирается на реальное поведение пользователей и реальные показатели производительности системы. Это позволяет получить объективные результаты тестирования и дать рекомендации по улучшению системы.