українська версія сайтуenglish website versionрусская версия сайта Deutsche Website Version
    ДомашняяОбучениеПосещение курсовПолучение работы QAСтатьиО насКонтактыНовостиФорум
     


    Мастерство в Обеспечении Качества ПО
    Подписаться письмом
    Наиболее популярные курсы Центра
    Какие курсы Центра Вам наиболее интересны?

     
      тел.: +38(044)45-900-46
      e-mail: classes@tester-training.com.ua

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

    Если отбросить инструменты для нагрузочного тестирования, которые уже не поддерживаются, имеют проблемы с установкой или являются платными, то для рассмотрения остаются пять кандидатов: curl-loader, httperf, Siege, Tsung и Apache JMeter.

    ð curl-loader

    curl-loader ставит своей задачей «предоставить мощное и гибкое решение с открытым кодом, которое будет равноценно таким решениям, как Spirent Avalanche и IXIA IxLoad». Он использует надежную и гибкую библиотеку cURL для аутентификации и обработки запросов.

    Сборка инструмента несложна: скачиваем, распаковываем из tar-архива, и компилируем полученный код. Для успешной компиляции необходимо установить библиотеку OpenSSL и ее заголовочные файлы. Возможно, понадобится добавить #include в файл ip_secondary.c, в связи с недавними изменениями в заголовочных файлах библиотеки glibc.

    Для начала тестирования надо еще поработать над настройками; у curl-loader-а они разделены на две части.

    Первая часть – это конфигурационный файл, содержащий параметры для конечных сценариев; он имеет простейший формат – присвоение переменных вида «число = значение», разделенное переводами строки. В папке conf-examples находится несколько самоочевидных примеров таких настроек. curl-loader умеет использовать несколько IP адресов для реалистичной симуляции запросов с различных машин, так что вам понадобится изменить значения таких переменных, как INTERFACE, CLIENTS_NUM_MAX, NETMASK, IP_ADDR_MIN и IP_ADDR_MAX, для соответствия вашему сетевому окружению. Максимальное количество одновременных подключений должно соответствовать заданному вами интервалу IP.

    Вторая часть – это параметры командной строки для исполняемого файла curl-loader. Один из параметров, -f <путь к файлу сценария>, является ключевым; остальные параметры предназначены для настройки отработки сценария. Так, например, по умолчанию все запросы инициируются curl-loader-ом из одного потока; хотя это и позволяет сэкономить системные ресурсы и повысить производительность, разумнее увеличить число потоков до числа ядер вашего процессора с помощью опции –t.

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

    Аналогом curl-loader-а, написанным на языке Python, является Pylot. Этот инструмент имеет графический интерфейс и использует конфигурационные файлы в формате XML.

    ð httperf

    httperf – это простая утилита для нагрузочного тестирования, разработанная компанией Hewlett-Packard; она запускается из командной строки и работает в одном потоке.

    Основная настройка httperf выполняется параметрами командной строки; файлы настроек являются вспомогательными и используются для настройки сценария сессий.

    Например, строка для создания 5000 соединений, каждое из которых попытается выполнить 50 запросов, выглядит так:

    httperf --server=localhost --uri=/ --num-conns=5000 --num-calls=50

    Первая строка результатов будет содержать параметры, которые не были заданы и поэтому получили значения по умолчанию:

    httperf --client=0/1 --server=localhost --port=80 --uri=/ \

    --send-buffer=4096 --recv-buffer=16384 \

    --num-conns=5000 --num-calls=50

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

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

    Хотя с анализом аргументов командной строки у httperf-а не все гладко. Например, разделение идентификатора тестируемого ресурса на сервер (--server) и путь (--uri) излишне, к тому же название опции для последнего неточно, поскольку идентификатор может включать имя сервера.

    Из аналогов httperf-а стоит отметить http_load - менее сложный инструмент с таким же интерфейсом.

    ð Siege

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

    Запуск Siege с параметрами по умолчанию имеет очень простой вид:

    siege localhost

    Однако такой пример не позволит вам оценить главное достоинство Siege – способность обращения к группе ссылок в хаотичном порядке, как это делают настоящие пользователи. Для сбора ссылок автор Siege предоставляет дополнительную утилиту Sproxy. Установите ее; в настройках браузера, укажите localhost:9001 в качестве HTTP proxy, и запустите со следующими опциями:

    sproxy –v –o urls.txt

    Sproxy сохранит адреса всех страниц, которые вы откроете в текущей сессии, в файл urls.txt.

    После того, как вы набрали достаточно ссылок для тестирования, запустите следующий тест:

    Siege –v --internet --file=urls.txt

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

    ð Tsung

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

    Но все имеет свою цену. Tsung не позволяет сразу же запустить тест из командной строки, как мы делали с Siege, curl-loader и httperf – нужно либо создавать сценарий вручную в файле ~/.tsung/tsung.xml, либо использовать режим записи, который похож на Sproxy:

    1. Запустить запись командой tsung recorder, указать localhost:8090 в качестве HTTP proxy, и посетить страницы для тестирования.
    2. Открыть запись сессии в файле ~/.tsung и исправить сценарий в соответствии с вашими задачами – подробности о формате файла и ключевых параметрах можно посмотреть в инструкции пользователя.
    3. Сохранить измененный файл под именем ~/.tsung/tsung.xml.
    4. Запустить тест командой tsung start.

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

    Еще один плюс Tsung – он умеет создавать нагрузку на сервера PostgreSQL и Jabber.

    ð Apache JMeter

    Поскольку JMeter – это Java-приложение, для его работы необходимо иметь Java JDK – его можно скачать на http://java.sun.com/j2se/.

    Для установки JMeter его достаточно распаковать; запускаемый файл, jmeter, находится в папке bin. Этот инструмент имеет графический интерфейс, который предоставляет возможность настроить все параметры нагрузочного тестирования посредством сценариев тестирования (Test Plan).

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

    Например, группа Thread Group описывает группу пользователей, которых вы хотите имитировать в текущем сценарии. Группа включает следующие поля:

    • Name – название группы
    • Number of threads – число пользователей, входящих в группу
    • Ramp-up period – период ожидания между группами пользователей, в секундах
    • Loop count – количество циклов обращений группы к страницам. При включении опции Forever, все пользователи группы выполнят свои запросы, потом подождут в течение ramp-up секунд, потом снова выполнят свои запросы, и так далее. Опцию Forever надо использовать осторожно, чтобы не перегружать сервер без необходимости.
    • Scheduler – позволяет задать начальное и конечное время работы группы.

    Группа HTTP Request указывает, что и как тестировать:

    • Server name or IP – имя или IP-адрес сайта
    • Port Number – номер порта для подключения; для веб-серверов это обычно 80
    • Protocol – HTTP или HTTPS
    • Path – ссылка (URL) для тестирования

    Третья обязательная группа, Listener, сохраняет все результаты тестирования и отображает их в графической форме. Различные типы Listener-ов предоставляют результаты в разной форме: например, Graph Results строит график успешности обработки запросов, а View Results in Table сводит эти данные в таблицу. Один сценарий может содержать несколько Listener-ов.

    Некоторые сайты требуют входа в систему для полноценной навигации по ним. В JMeter вход реализуется с помощью дополнительной группы HTTP Request, которая указывает на страницу и поля для входа и использует метод POST (в отличие от значения по умолчанию GET). Список имен и паролей пользователей хранится в файле /bin/users.xml, имеющий несложный формат:

    <?xml version="1.0"?>
    <!DOCTYPE allthreads SYSTEM "users.dtd">
         <allthreads>
              <thread>
                   <parameter>
                        <paramname>username</paramname>
                        <paramvalue>name1</paramvalue>
                   </parameter>
                   <parameter>
                        <paramname>password</paramname>
                        <paramvalue>password1</paramvalue>
                   </parameter>
                   <parameter>
                        <paramname>passwordconfirm</paramname>
                        <paramvalue>password1</paramvalue>
                   </parameter>
              </thread>
              <thread>
                   <parameter>
                        <paramname>username</paramname>
                        <paramvalue>name2</paramvalue>
                   </parameter>
                   <parameter>
                        <paramname>password</paramname>
                        <paramvalue>password2</paramvalue>
                   </parameter>
                   <parameter>
                        <paramname>passwordconfirm</paramname>
                        <paramvalue>password2</paramvalue>
                   </parameter>
              </thread>
              <!—еще пользователи, при необходимости -->
         </allthreads>

    paramname – это поля, использующиеся при входе в систему, а paramvalue – значения, которые в них нужно вносить.

    Для использования этого файла необходимо добавить подгруппу Pre Processors -- HTTP User Parameter Modifier в группу HTTP Request, а также привести параметр Number of threads в группе Thread Group в соответствие с числом пользователей в файле users.xml.

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

    Заключение

    У каждого рассмотренного инструмента есть свои достоинства и недостатки. Все они хорошо документированы, легко устанавливаются и стабильны в работе.

    Для выбора инструмента, наиболее подходящего к вашей конкретной задаче, можно рассматривать их от простого к сложному, в следующей последовательности. Начните с Siege и посмотрите, чего вы можете добиться с его ограниченными возможностями; потом попробуйте httperf, который имеет больше возможностей и работает быстрее; если вам нужны более сложные сценарии, переходите на curl-loader или Tsung – у них наибольшие наборы возможностей, но Tsung надо долго осваивать.

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

     

    (по материалам Linux.com)
     
     вверх
    Копирайт © 2006 - 2007 CEQA.