История создания
Sparrow — очень молодой проект. Возник как надстройка над инструментом swat — DSL, написанным на perl для разработки тестовых сценариев различных web приложений. Описание swat — отдельная тема, которую я, возможно, раскрою в следующих публикациях, но, если в двух словах, то swat — это средство для автоматизация web тестирования, базирующееся на использовании утилиты curl и позволяющее создавать произвольные http запросы и валидировать возвращаемый контент.
Установка sparrow
Ставим как обычный cpan модуль.
$ sudo cpanm Sparrow
После установки в текущем PATH становится доступна утилита sparrow, собственно консольный клиент, предоставляющий весь набор функций фреймворка.
Идеология sparrow
Sparrow задуман как простой консольный клиент позволяющий быстро настраивать и запускать тесты для различных web приложений. Можно выделить два типа базовых операций в рамках данного инструмента — создание тестовой структуры и установка, запуск sparrow плагинов.
Структура sparrow проекта
На данный момент есть три основных сущности, которыми оперирует sparrow — проекты, сайты и плагины.
Проекты — абстракции, позволяющие описывать группы тестируемых приложений. У проекта есть идентификатор, набор плагинов и набор тестируемых сайтов. Вот как это может выглядеть в консольном выводе при работе с утилитой sparrow. Выводим структуру sparrow проекта:
$ sparrow project foo # sparrow environment initialzed at /home/vagrant/sparrow project foo info: [plugins] swat-mongodb-http swat-pintod swat-app-docsisious metacpan swat-lighttpd swat-yars swat-nginx [sites] mongodb-http-server [127.0.0.1:28017] pintod-server [127.0.0.1:3111] metacpan [http://metacpan.org] lighttpd [127.0.0.1:8080] thorsen [http://home.thorsen.pm/docsisious] yars_server [localhost:9001] localhost [127.0.0.1]
Из приведенного вывода можно понять что данный проект содержит набор плагинов ( mongodb-http-server, pintod-server,… ) для тестирования соответствующих приложений и набор сайтов, о которых речь пойдет далее.
Сайты sparrow
Сайты в sparrow описывают произвольное тестируемое web приложение. Помимо идентификатора сайт должен иметь базовый URL — являющимся «корневым» URL для http запросов, которые будут приходить во время прогона тестов. В большинстве случаем базовый URL может совпадать с fqdn или IP адресом сервера тестируемого приложения, причем указание схемы и порта необязательно. Если быть точным, base url должен быть совместимым с форматом curl url. Стоит также заметить, что несмотря на то что curl позволяет взаимодействие и с другими протоколами ( ftp,… ), sparrow в связке со swat используется только для тестирования приложений по протоколу http.
Вот пример создания сайта в проекте sparrow в случае с приложением типа nginx сервер:
$ sparrow project foo add_site nginx-server 127.0.0.1
Плагины sparrow
Плагины — самая интересная и перспективная особенность sparrow, делающим его мощным средством для тестирования и мониторинг web приложений. Возможно я плохо искал, но не нашел чего-то похожего в других средствах автоматизации тестирования, причем не только в экосистеме perl, но и других языках программирования.
В двух словах, sparrow плагин — это переносимый набор тестов ( test suite ), который можно установить и запустить. Очень понятная аналогия может быть построена на примере различных пакетных менеджером, типа yum в centos или apt-get в debian. Под различные типы приложений должна быть возможность выбрать и установить плагин, инкапсулирующий определенный тестовый набор, который может быть запущен для данного приложения.
На данный момент список sparrow плагинов весьма ограничен, но есть надежда, что члены perl community заметят проект и в скором времени мы сможем увидеть много новых плагинов. Тем более что процесс написания нового плагина в большинстве случаев тривиален и даже не требует знания perl как такового, но повторюсь, раскрытие данной темы выходит за рамки моего поста, и возможно будет осуществлено в будущем.
Итак, sparrow плагины могут быть установлены и добавлены к проектам:
$ sparrow plg list # sparrow environment initialzed at /home/vagrant/sparrow [sparrow plugins list] swat-yars | https://github.com/melezhik/swat-yars.git metacpan | https://github.com/CPAN-API/metacpan-monitoring.git swat-app-docsisious | https://github.com/melezhik/swat-app-docsisious.git swat-nginx | https://github.com/melezhik/swat-nginx.git swat-lighttpd | https://github.com/melezhik/swat-lighttpd.git swat-pintod | https://github.com/melezhik/swat-pintod.git swat-mongodb-http | https://github.com/melezhik/swat-mongodb-http.git
Установка плагина на данный момент реализована как обычный чекаут из удаленного git репозитария, возможно в будущем данная функциональность будет переписана с использованием собственных sparrow репоизитариев с версионированием дистрибутивов и прочими удобствами, по аналогии с обычным cpan репозитарием.
vagrant@Debian-jessie-amd64-netboot:~/projects/sparrow$ sparrow plg install swat-nginx # sparrow environment initialzed at /home/vagrant/sparrow installing plugin swat-nginx ... Cloning into 'swat-nginx'... .... Installing modules using /home/vagrant/sparrow/plugins/swat-nginx/cpanfile Successfully installed Outthentic-DSL-0.0.4 Successfully installed swat-0.1.68 2 distributions installed Complete! Modules were installed into /home/vagrant/sparrow/plugins/swat-nginx/local
Установив плагин, нужно прикрепить его к проекту и после этого запустить тестовый набор, используя в качестве входного параметра выбранный сайт (web приложение):
$ sparrow project foo add_plg swat-nginx # sparrow environment initialzed at /home/vagrant/sparrow plugin swat-nginx is successfully added to project foo $ sparrow project foo check_site nginx-server swat-nginx # sparrow environment initialzed at /home/vagrant/sparrow /home/vagrant/.swat/.cache/3486/prove/00.GET.t .. ok 1 - GET 127.0.0.1/ succeeded # response saved to /home/vagrant/.swat/.cache/3486/prove/p3y5aUKFgj ok 2 - output match '200 OK' ok 3 - output match /Server: nginx\/(\S+)/ ok 4 - valid nginx version: 1.6.2 1..4 ok All tests successful. Files=1, Tests=4, 1 wallclock secs ( 0.01 usr 0.00 sys + 0.04 cusr 0.00 csys = 0.05 CPU) Result: PASS
Заключение
На этом наше знакомство со sparrow к сожалению заканчивается, хотя, конечно, еще есть о чем рассказать. Как уже упоминалось, проект еще очень молодой и активно развивается, как, впрочем, и основной компонент для написания тестовых сценариев — swat. Есть надежда, что perl сообщество, да и все те, кому близка автоматизация процессов тестирования и мониторинга внесут свой вклад в историю жизни пока еще маленького, но уже проворного воробья (*).
(*) — «sparrow» — в переводе с английского означает воробей.
P.S.
Не удержусь добавить еще несколько важных моментов, возможно предвосхищая некоторые вопросы, которые могут возникнуть после прочтения статьи.
- удаленный запуск тестов через web api — такая возможность планируется к реализации в ближайшее время, памятуя о большом количестве систем, позволяющих проверять доступность web сервисов через вызовы во внешние API, например тот же consul или nagios .
- интеграция с существующими системами непрерывной интеграции и отчетности — так на выходе, после запуска sparrow плагина мы получаем TAP, легко написать парсер, конвертирующий результаты в другие форматы. Скажу больше так как sparrow при запуске плагинов вызывает swat, который в свою очередь использует perl prove для выполнения тестов, данная возможность по конвертации TAP в разные форматы предоставляется «из коробки», ну или с минимальным написанием кода, детали можно узнать на странице документации swat, в секции «TAP».
- ну и наконец, вполне резонный вопрос — «где уже тестировалось данное решение (sparrow/swat) ?» Swat зарекомендовал себя как очень удобное средство для быстрой разработки smoke тестов для десятков web приложений в короткие сроки, в ходе моей ежедневной работы в качестве devops инженера. Sparrow еще только тестируется, но уже сейчас можно сказать что данный проект является логическим продолжением swat, a c применением sparrow плагинов есть шанс, что станет востребованным с среде web разработчиков, девопосов и системных администраторов.
ссылка на оригинал статьи http://habrahabr.ru/post/272245/
Добавить комментарий