GrabDuck

JarvisJS: Функциональное тестирование веб-приложений

:

Здравствуй Хабр! В этом посте мы хотели бы поздороваться и впервые показать миру наш проект JarvisJS.com — сервис для функционального тестирования веб-приложений. Проект еще совсем молод и с любовью разрабатывается командой из трех человек в течении вот уже семи месяцев.

Под катом мы расскажем о нашем сервисе и о причинах, побудивших нас на его создание.

Неважно какого размера приложения мы разрабатываем — малые или большие, как разработчики, мы всегда понимаем важность тестирования в нашей работе. Причем чем больше опыта мы приобретаем, тем более явно в этом убеждаемся. А всегда ли мы тестируем наш код? Думаю даже самые сильные из нас, положа руку на сердце, ответят — нет.

Тестирование всегда связано с двумя задачами: настройка некоторой инфраструктуры для тестирования и, собственно, разработка тестов. Бывает, поначалу в небольших проектах кажется, что трата времени на тестирование того не стоит — хочется как можно быстрее идти вперед и строить новый функционал. Но потом жизнь оборачивается весьма предсказуемо и проект перерождается в огромную антигидру — отрубив один кусок функционала мы рушим и два других.


В зависимости от типа тестирования нашего кода затраты на подготовку к нему различны. Если для организации unit-тестов обычно ничего сверхъестественного делать не нужно, то, например, для функционального тестирования frontend-а с помощью Selenium-а необходимо развернуть целую инфраструктуру, особенно если хочется, чтобы все тесты запускались где-то удаленно.

Именно это функциональное тестирование долгое время не давало нам покоя. Идея проста и понятна — тестируем приложение так, как с ним работал бы живой человек, прямо в браузере. При этом организация всего процесса тестирования задача не самая простая и может требовать от членов команды компетенций, которыми они не обладают или не интересуются вовсе (например, unix и его командная строка, новый язык вроде Java для написания Selenium-тестов, правда недавно появился WebdriverJS).

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

Для frontend-разработчика родным инструментом безусловно является Javascript, а наиболее «правильной» реализацией функционального тестирования на базе Javascript является наверное уже знакомый всем PhanotmJS. PhantomJS действительно изумительный инструмент, позволяющий управлять браузером при помощи языка Javascript и при этом позволяющий автоматизировать запуск тестов на удаленном сервере. Правда, при этом тестирование осуществляется только в одной ветке браузеров — Webkit, но в случае если вас интересует именно функциональное тестирование логики, а не движков отрисовки, то по сравнению с ощущением нахождения в родной среде это не столь критичный недостаток.

При этом поверх PhantomJS уже сформировалось множество различных инструментов, которые делают работу с ней еще проще: CasperJS, Zombie.JS, DalekJS,… Лично мы остановили свой выбор на CasperJS.

CasperJS — это open source проект, предоставляющий простой интерфейс для работы с PhantomJS и SlimerJS и позволяющий разрабатывать функциональные тесты для браузеров на движках webkit (Chrome, Safari, ...) и gecko (Firefox).

Однако не смотря на всю Javascript-овую ламповость подобных инструментов, тесты по-прежнему нужно как-то хранить, где-то запускать и кому-то писать.

Наше видение решения этих задач выразилось в проекте, который мы и хотели бы вам презентовать — JarvisJS.


JarvisJS — это сервис, упрощающий разработку функциональных тестов на основе фреймворка CasperJS и позволяющий запускать их в облаке.

Для помощи в разработке тестов Jarvis предоставляет браузерное расширение, позволяющее записывать последовательность ваших действий. На данный момент расширение доступно только для браузера Chrome.

Пример работы с JarvisJS можно посмотреть на этом видео:

После записи теста можно тут же сохранить его в сервисе и выполнить на удаленном сервере. Тесты можно группировать по проектам и запускать сразу весь проект. Результаты теста состоят из набора заданных в нем assert-ов c результатами их проверки. На каждую такую проверку автоматически создается снимок экрана.

Для тех случаев, когда для описания теста гибкости браузерного расширения будет не достаточно, любой тест можно конвертировать в CasperJS-код и продолжить разработку теста на JavaScript.

Подобно обычным фреймворкам для тестирования в Jarvis-e доступны аннотации тестов, такие как «before» и «after». Благодаря этим аннотациям можно легко разносить функциональность, например, вынести тест авторизации в отдельный тест с аннотацией beforeEach.

На текущий момент мы находимся на предстартовой стадии. И хотели бы проверить функционирование всех систем в «боевых» условиях на реальных пользователях, но с контролируемым их числом. =)

В связи с чем, всех заинтересовавшихся в нашем проекте мы будем очень рады видеть на нашей бете. Оставьте ваш email на странице jarvisjs.com и в ближайшее время, как только мы будем готовы — мы пригласим вас в гости в наш сервис.

В дальнейших постах мы хотели бы рассказать о внутренней кухне нашего проекта, о том как приручали PhantomJS и CasperJS, об используемых технологиях и о планировании проекта в условиях частичной занятости.

Будем рады любым вашим комментариям и предложениям! Спасибо за внимание!

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