Блог A1QA

О тестировании и качестве ПО

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

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

Для реализации максимально объективных шаблонов поведения пользователей необходимо ответить на ряд вопросов:

  • Каково общее количество пользователей, взаимодействующих с приложением?
  • Какая часть пользователей использует приложение во время наибольшей его загруженности?
  • Какие действия выполняют эти пользователи и как часто?

Ответы на эти вопросы можно получить путем изучения статистической информации, собранной веб-аналитическими инструментами.

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

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

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

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

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

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

Что измерять при тестировании производительности?

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

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

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

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

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

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

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

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

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

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

Преимущества профессионального подхода к тестированию

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

Основные преимущества профессионального подхода указаны на рисунке ниже.

тестирование производительности - отличия профессионального от непрофессионального

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

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

Послесловие

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

Поделиться статьей: