понедельник, 15 октября 2012 г.

httest: HTTP Test Tool

httest - набор инструментов для подготовки всех видов тестовых сценариев для приложений, использующих HTTP-протокол. Есть версии под Windows/*NIX/MacOS. Благодаря своей простой конструкции (требуется только бинарный файл httest) он может использоваться на любых серверах для различных аналитических целей. Области применения httest разнообразны и включают в себя как простые тесты, так и технические проверки, тестирование производительности и мониторинга системы. Простой синтаксис позволяет неспециалистам быстро понять и написать тесты.

httest обладает обширным функционалом:
  • расширенная обработка HTTP-протокола, в том числе настройка тайм-аутов, запросов и проверка ответов;
  • большое число команд для подготовки HTTP-запросов и обработки HTTP-ответов;
  • имитация клиентов и серверов, в том числе запуск и завершение работы демона сервера, что позволяет создавать макеты серверных систем (заглушки) для сложных тестовых ситуаций, например, когда тестируемое приложение должно взаимодействовать с третьей стороной, обычно не доступной в тестовой среде;
  • запуск внешних программ, использующих интерфейс командной строки, используя свои данные как параметры запроса или для целей проверки;
  • копирование потока данных (например, от ответа) и повторное использование его в переменных;
  • поддержка языков Lua и JavaScript для расширения функционала httest;
  • параллельное исполнение запросов в отдельных потоках и многое другое.

Основные элементы httest:
  • httest - основная программа для работы с тестовыми сценариями;
  • htproxy - генератор скриптов httest;
  • htntlm - поддержка NTLM в тестовых сценариях;
  • hturlext - экстрактор url из  HTML-форм;
  • htremote - включает поддержку интерактивных действий в сценариях httest.

Официальная страничка: http://htt.sourceforge.net/cgi-bin/cwiki/bin/public
Страничка на скачивание и документацию: http://htt.sourceforge.net/cgi-bin/cwiki/bin/public?page=HttDownloadSection
Страничка с примерами использования: http://htt.sourceforge.net/cgi-bin/cwiki/bin/public?page=HttDocumentation

Демонстрация возможностей

httest имеет очень подробную документацию по своим многочисленным командам, поэтому приведем лишь короткий пример его использования.
Требуется скачать и распаковать архив с httest. Пусть для примера у нас будет Windows-система, и каталог с распакованной программой: c:\httest.
Тестовые сценарии httest должны располагаться в файлах *.htt. Файлы с расширением функционала - библиотеки httest - должны располагаться в файлах *.htb. Основной скрипт теста может содержать подключаемые библиотеки (include statements), глобальные и локальные команды (global, local commands), переменные (variables), блок основного кода (bodies) и комментарии (comments):
  • Command: инструкции (глобальные и локальные) для выполнения таких действий как: отправка HTTP-запросов, установка полей заголовков, обработка HTTP-ответов и т.д.;
  • Include: глобальная команда использующаяся для подключения внешних скриптов;
  • Variables: регистрозависимые переменные используются для сохранения значений в процессе исполнения скрипта;
  • Body: блок кода, содержащий некоторое число команд;
  • Comment: комментарии.
Для демонстрации возможностей создадим 2 файла: test.htt - для проверки доступности некоторого контента на локальном сервере и params.htb - для хранения параметров запросов. Последняя пустая строка в файлах  с тестами и настройками - обязательна.

params.htb - файл с глобальными настройкам.

test.htt - файл с тестом.
Запуск теста осуществляется в командной консоли простой командой вида:
httest [OPTIONS] your_test_script

Список поддерживаемых опций можно узнать командой httest --help. При запуске скрипта test.htt произойдет попытка запуска сервера на локальной машине, соединение с сервером, и проверка на наличие в ответе от сервера значений value1 и value2, а также на соответствие полученных headers некоторому регулярному выражению. Если все команды теста завершатся успешно, в самом конце лога выйдет сообщение OK, иначе - FAILED.


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