Sparrow — perl фреймворк тестирования и мониторинга web приложений

от автора


История создания

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.

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

  1. удаленный запуск тестов через web api — такая возможность планируется к реализации в ближайшее время, памятуя о большом количестве систем, позволяющих проверять доступность web сервисов через вызовы во внешние API, например тот же consul или nagios .
  2. интеграция с существующими системами непрерывной интеграции и отчетности — так на выходе, после запуска sparrow плагина мы получаем TAP, легко написать парсер, конвертирующий результаты в другие форматы. Скажу больше так как sparrow при запуске плагинов вызывает swat, который в свою очередь использует perl prove для выполнения тестов, данная возможность по конвертации TAP в разные форматы предоставляется «из коробки», ну или с минимальным написанием кода, детали можно узнать на странице документации swat, в секции «TAP».
  3. ну и наконец, вполне резонный вопрос — «где уже тестировалось данное решение (sparrow/swat) ?» Swat зарекомендовал себя как очень удобное средство для быстрой разработки smoke тестов для десятков web приложений в короткие сроки, в ходе моей ежедневной работы в качестве devops инженера. Sparrow еще только тестируется, но уже сейчас можно сказать что данный проект является логическим продолжением swat, a c применением sparrow плагинов есть шанс, что станет востребованным с среде web разработчиков, девопосов и системных администраторов.

ссылка на оригинал статьи http://habrahabr.ru/post/272245/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *