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 - файл с глобальными настройкам.
#Настройки соединения. Указываем хост и порт. SET target=http://10.111.141.37 SET targetPort=2222 SET requestedPath=/WebEngine_Testsite/ #Настройки параметров для сравнения. Определяем условия, которые будут означать, что контент цели доступен. SET value1="200 OK" SET value2="Content-Type: text/html" SET matchStr="headers "HTTP/1.1 ([0-9]+) (.*)" code text"
test.htt - файл с тестом.
INCLUDE params.htb # Простой HTTP-сервер, который возвращает некоторый ответ на запрос. SERVER $targetPort _RES _WAIT __HTTP/1.1 200 OK __Content-Length: AUTO __Content-Type: text/html __ END # Блок получает параметры: URL, port, requested path, значения 2х полей, regex для сравнения BLOCK isUptime _REQ $1 $2 __GET $3 HTTP/1.1 __Host: $host __ _EXPECT . $4 _EXPECT . $5 _MATCH $6 _WAIT END # Действия клиента CLIENT isUptime localhost $targetPort / $value1 $value2 $matchStr END
Запуск теста осуществляется в командной консоли простой командой вида:
httest [OPTIONS] your_test_script
Список поддерживаемых опций можно узнать командой httest --help. При запуске скрипта test.htt произойдет попытка запуска сервера на локальной машине, соединение с сервером, и проверка на наличие в ответе от сервера значений value1 и value2, а также на соответствие полученных headers некоторому регулярному выражению. Если все команды теста завершатся успешно, в самом конце лога выйдет сообщение OK, иначе - FAILED.
httest [OPTIONS] your_test_script
Список поддерживаемых опций можно узнать командой httest --help. При запуске скрипта test.htt произойдет попытка запуска сервера на локальной машине, соединение с сервером, и проверка на наличие в ответе от сервера значений value1 и value2, а также на соответствие полученных headers некоторому регулярному выражению. Если все команды теста завершатся успешно, в самом конце лога выйдет сообщение OK, иначе - FAILED.
Таким образом, httest может быть использован, например, для предварительной проверки работоспособности цели тестирования, или поднятия сервера, возвращающего некоторый, заранее подготовленный, тестовый контент.