Hагрузочное тестирование web-сайта

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

1. Определение цели тестирования. Что мы хотим увидеть в результате выполнения теста?
2. Определение начальных параметров тестирования. И будут ли эти параметры изменяться в процессе выполнения теста. Например, список URL в переделах тестируемого сайта, которые будут посещаться в процессе теста (может быть и одна ссылка, например, при использовании ab); количество виртуальных пользователей, которое эмулируется инструментом нагрузки; количество этапов тестирования; длительность этапов; будут ли паузы между этапами и какой продолжительности и т. д.;
3. Выбор инструмента для нагрузочного тестирования в зависимости от поставленной цели и списка параметров, которые будут изменяться в процессе теста;
4. Предварительное тестирование для определения параметров финального тестирования;
5. Финальное тестирование;
6. Анализ результатов тестирования. Например, лог-файлов процесса тестирования; автоматически созданных отчетов; другого текстового/графического материала, который получен в процессе выполнения теста и др.;
7. Выводы по результатам тестирования. Например, определение предела нагрузки на сервер; необходимость проведения оптимизации сайта (сервера); оценка результатов оптимизации; необходимость приобретения более дорогого оборудования или тарифного плана и т. д.

 

Существует множество инструментов нагрузочного тестирования разного уровня. От простых, которые выполняются идентичными запросами на один и тот же адрес, до сложных систем, позволяющим имитировать пользовательские сессии, авторизацию, работу по защищенному протоколу HTTPS и многое другое. В этой статье будут рассмотрены такие инструменты нагрузочного тестирования:
- AB (Apache HTTP server benchmarking tool);
- Apache JMeter;
- Pylot;
- Siege;
- Tsung;
- WAPT;

 

Результат краткого сравнительного анализа этих инструментов приведен в таблице.

тестирование веб-сайта

 

Как видно из таблицы, наиболее удобным и универсальным инструментом является Tsung. Инструмент поддерживает поэтапное тестирование с возможностью изменения параметров нагрузки на каждой фазе, содержит в составе скрипт генерирования графических отчетов по результатам тестирования, которые достаточно наглядно и понятно предоставляют информацию из лог-файла теста. Поддерживает пользовательские сессии и содержит удобный функционал для их создания (собственный прокси-сервер). Работает через командную строку. Не требует наличия графического окружения рабочего стола. Не создает высокой нагрузки на сервер, с которого происходит тестирование. Из отрицательных сторон стоит отметить немного запутанный конфигурационный файл, однако документация разработчиков содержит достаточно информации, чтобы с ним разобраться.
В это же время нужно отметить, что Apache JMeter также очень мощный инструмент, с помощью которого можно тестировать сложные web-приложения, но общеизвестным фактом, который подтвердился при пробном использовании этого инструмента, является то, что он достаточно «тяжелый». При попытке генерирования большого количества запросов, он сильно нагружает ПК, с которого производится тестирование (иногда в процессе теста наблюдается зависание и самовольное завершение работы Apache JMeter). Кроме этого требует обязательного наличия графического окружения рабочего стола (не работает через командную строку). Еще одной из негативных характеристик является неудобное масштабирование создаваемых графиков. Однако содержит множество вариантов тестирования и гибкий в настройках.
Также стоит отметить Siege, который при доработке с помощью shell-скриптов позволяет реализовать автоматическое поэтапное тестирование с изменением параметров на каждой фазе теста. Является отличным инструментом для быстрых экспресс-тестов. Имеет достаточно простой и хорошо прокомментированный конфигурационный файл. Работает через командную строку. Не требует наличия графического окружения рабочего стола. Поддерживает списки URL, по которым происходит тестирование. Из минусов нужно отметить отсутствие функционала для создания графических отчетов.
Таким образом для тестирования мы рекомендуем использовать Tsung, для быстрых экспресс-тестов — Siege. При наличии достаточных мощностей и графической оболочки ОС стоит также обратить внимание на Apache JMeter.

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

 

График Transactions и HTTP return code Status (rate) неоптимизированного сайта

 

graphes-HTTP_CODE-rate-1

Те же графики с аналогичными настройками тестирования (после оптимизации)

graphes-Transactions-rate-1

graphes-HTTP_CODE-rate-1

Те же графики при проверке максимально допустимой нагрузки (после оптимизации)

graphes-Transactions-rate-1

Пример отчета при использовании одиночного тестирования с помощью Siege:
Lifting the server siege... done.
Transactions: 14602 hits
Availability: 100.00 %
Elapsed time: 299.22 secs
Data transferred : 45.22 MB
Response time: 0.41 secs
Transaction rate: 48.80 trans/sec
Throughput: 0.15 MB/sec
Concurrency: 19.95
Successful transactions: 14602
Failed transactions: 0
Longest transaction: 3.20
Shortest transaction: 0.00

Общие результаты, если реализовано автоматическое поэтапное тестирование с помощью Siege, имеют следующий вид:

Нагрузочное тестирование web-сайта лучше проводить в сочетании с использованием какой-либо системы мониторинга на сервере, где расположен сайт (например, zabbix, nagios, munin, cacti, monitorix и др.). Это даст возможность оценить поведение сервера не только со стороны пользователя (наличие задержек в загрузке сайта, ошибки и т. д.) а и оценить расход ресурсов на самом сервере, выявить «узкие места» и т.д. Если рассматривать Tsung, то такая возможность есть изначально и может быть задана через конфигурационный файл (поддерживается мониторинг через Erlang, SNMP, Munin).

Источник: http://10serv.com/nagruzochnoe-testirovanie-web-sayta/

Категории: 

Метки: