Профессиональный подход к тестированию производительности ПО

19 июня 2018
Дата публикации
Профессиональный подход к тестированию производительности ПО
  • Тестирование ПО
  • Тестирование производительности
При разработке любого программного продукта важно понимать, как быстро он способен выполнять различные операции и как изменится поведение продукта с ростом нагрузки на сервер.

Иначе вполне вероятно, что в наиболее неподходящий момент — например, когда удачная рекламная кампания приведет на ресурс сразу 100 или 1000 пользователей, готовых оформить заказ, — система даст сбой и не сможет обработать важные запросы.

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

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


3 вопроса, ответы на которые помогут составить объективные шаблоны пользовательского поведения:
  • Каково общее количество пользователей (в час, в день, в месяц, в год), взаимодействующих с вашим приложением?
  • Сколько пользователей единовременно используют приложение во время его наибольшей загруженности?
  • Какие действия выполняют эти пользователи и как часто?
Чтобы ответить на эти вопросы, придется изучить статистические данные, собранной веб-аналитическими инструментами (например, Google Analytics).

Так, статистика о посещении интернет-магазина в обычный период и в период сезонных распродаж позволяет спрогнозировать ожидаемый уровень нагрузки в конце будущего сезона. Тестирование производительности, в свою очередь, может предсказать, как быстро система будет реагировать на действия пользователей при ожидаемой пиковой нагрузке, найти «узкие» места и повысить эффективность, например, за счет оптимизации настроек окружения.

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

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

Разработка скриптов осуществляется с помощью инструментов нагрузочного тестирования, которые позволяют записать процесс обмена данными между сервером и браузером пользователя на уровне протокола (чаще всего HTTP(S)) и впоследствии воспроизвести этот процесс с учетом логики корреляции динамических параметров.
Во время разработки сетевой трафик, генерируемый нагрузочными скриптами, тщательно сверяется с трафиком браузера пользователя. Это позволяет избежать ошибок в работе скриптов.

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

Нужна помощь? Закажите консультацию по тестированию производительности вашего продукта. 

Тестирование производительности

Рассмотрим ключевые характеристики, измеряемые во время тестов производительности.

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

Как правило, допустимое значение времени отклика не должно превышать двух секунд. Однако это значение может варьироваться в зависимости от категории веб-сайта.
Например, одними из наиболее требовательных систем к времени отклика являются игровые онлайн-порталы. Считается, что для комфортной игры среднее время отклика не должно превышать 50 миллисекунд. Напротив, время отклика сервера при генерации годового отчета банковской системы может достигать 30 секунд и считаться абсолютно допустимым.

Еще одной важной характеристикой производительности является количество хитов (запросов) в секунду. В процессе тестирования инструмент нагрузочного тестирования измеряет количество успешно обработанных запросов, отправленных на сервер. В результате можно определить соответствует ли пропускная способность сервера установленным требованиям производительности. Количество запросов в секунду может варьироваться от нескольких десятков, до нескольких тысяч десятков запросов, легко обрабатываемых, к примеру, крупными поисковыми системами.

Часто при выполнении действия на сайте, например, авторизации, пользователь отправляет несколько запросов. Для того, чтобы оценить скорость выполнения такого действия, при разработке скриптов, запросы объединяются в одну общую транзакцию. Количество успешно завершенных действий в секунду времени определяется количеством транзакций в секунду. Выделение отдельных бизнес-транзакций является чрезвычайно важным для анализа производительности приложения.

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

Увеличение количества пользователей также зачастую сопровождается появлением ошибок HTTP. Во время запуска тестов отслеживается не только число возникающих ошибок, но и их типы. Допустимое количество ошибок составляет менее одного процента от общего числа запросов. Помимо ошибок HTTP также отлавливаются ошибки в логах веб-сервера, базы данных и операционной системы.

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

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

Виды тестирования производительности

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

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

Одними из существенных аспектов тестирования производительности являются анализ и интерпретация полученных результатов.

Послесловие

Грамотный подход к тестированию производительности опирается на реальное поведение пользователей и реальные показатели производительности системы. Это позволяет получить объективные результаты тестирования и дать рекомендации по улучшению системы.