Pull to refresh

Консольный cucumber и capybara при помощи Selenium и Hudson

Reading time 4 min
Views 4.2K
Original author: Ludo van den Boom
В наши дни разработчики ПО не могут прожить без их любимых тестовых фреймворков. Но вот чего разрабочики не хотят — так это обеспечивать постоянный запуск этих тестов. Также, команды разработчиков не хотят тратить время на доведение результатов теста до всех.

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

Наша цель — задокументировать шаги, требуемые для преодоления встречающихся препятствий на пути к запуску полного набора тестов Cucumber со сценариями на Selenium на сборочном сервере Hudson.

Ингридиенты


Мы будем использовать следующие ингридиенты в этом топике:
  • 1 инсталляцию Debian 5.0.4 'Lenny'
  • 1 инсталляцию Xvfb
  • 1 Web-браузер (в нашем случае, iceweasel, Firefox после Debianовского ребрендинга
  • 1 приложение для Ruby on Rails 2.3.7 (Не обязательно именно такую версию, с 3.0.0 все ок — прим. переводчика)
  • 1 гем Capybara 0.3.8
  • cucumber (0.7.3) по вкусу


Мы не будем погружаться в детали создания приложения Rails, установки гемов и разработки сценариев Cucumber. У них есть свои прекрасные мануалы.

Установка необходимых пакетов



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

Виртуальный фреймбуфер при помощи Xvfb


«В X Window System, Xvfb или виртуальный X фреймбуфер — это сервер X11, который выполняет все операции в памяти, не показывая ничего на экране» — http://en.wikipedia.org/wiki/Xvfb

$ apt-get install xvfb

Web браузер


После установки Xvfb мы можем пойти дальше и установить web браузер.

$ apt-get install iceweasel

Прежде, чем мы продолжим, нам нужно сконфигурировать профиль браузера так, чтобы он не ныл по поводу закрытия вкладок или восстановления после сбоя. Если этого не сделать, набор тестов сломается или будет работать вечно.

$ cd ~/.mozilla/firefox/xxxxxxxx.default/
$ vim user.js


Теперь впишем две строчки в файл user.js:

user_pref("browser.sessionstore.enabled", false);
user_pref("browser.sessionstore.resume_from_crash", false);


Проверка дисплея


Прежде чем мы начнем запускать наши тесты мы проверим что все пакеты установлены правильно. Чтобы сделать это запустите виртуальный фреймбуфер (сессию Xvfb) на дисплее 99 с экраном 0:

$ Xvfb :99 -ac -screen 0 1024x768x16


В другом окне терминала напишите:

$ DISPLAY=:99.0 iceweasel example.org


Это запустит наш веб браузер в виртуальном фреймбуфере и откроет главную страницу example.com в этом браузере. Дальше предстоит сделать «скриншот», чтобы мы могли увидеть что происходит внутри нашего виртуального фреймбуфера.

$ xwd -root -display :99.0 -out xwdout


И посмотрим наш скриншот при помощи:
$ xwud -in xwdout


(А если вы настраиваете удаленную машину, то можно файл xwdout забрать себе и посмотреть у себя — прим. переводчика)
Видите главную страницу example.org? Значит Xvfb и iceweasel были успешно установлены и мы готовы провести несколько тестов.
image

Запуск cucumber



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

$ DISPLAY=:99.0 rake cucumber


Если все прошло хорошо, тогда мы увидим что все сценарии завершились успешно. Если успешны не все сценарии, проверьте сначала, а все ли хорошо в ситуации с нормальным графическим режимом.

Конфигурация Hudson



Теперь мы пришли к тому, чтобы попытаться со всей этой фигней взлететь. Нам нужно добавить новый сборочный шаг к задаче, которая должна запустить наш фоновый cucumber. Но прежде чем добавлять сборочный шаг, мы создадим стартовый скрипт для нашего виртуального фреймбуфера. Этот скрипт можно использовать чтобы запустить буфер перед прогоном сценариев и остановить буфер после завершения сценариев. Вы можете сохранить этот скрипт в /etc/init.d/. Убедитесь, что права установлены таким образом, что пользователь, от которого работает Hudson может выполнить его.

XVFB=/usr/bin/Xvfb
XVFBARGS="$DISPLAY -ac -screen 0 1024x768x16"
PIDFILE=/var/hudson/xvfb_${DISPLAY:1}.pid
case "$1" in
start)
echo -n "Starting virtual X frame buffer: Xvfb"
/sbin/start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
echo "."
;;
stop)
echo -n "Stopping virtual X frame buffer: Xvfb"
/sbin/start-stop-daemon --stop --quiet --pidfile $PIDFILE
echo "."
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/xvfb {start|stop|restart}"
exit 1
esac
exit 0


Финальный шаг — добавить сборочный шаг типа «Execute shell» в задачу Hudson. Вы можете использовать следующий набор команд чтобы запускать Ваш cucumber.

#!/bin/bash
export DISPLAY=:99
/etc/init.d/xvfb start
rake cucumber
RESULT=$?
/etc/init.d/xvfb stop
exit $RESULT


После добавления этого сборочного шага сохраним нашу задачу и позволим Hudson собрать ее. Если все идет хорошо, сценарии cucumber теперь будут работать как часть нашего процесса непрерывной интеграции. Вы можете посмотреть страницу «Console output» сборки в Hudson для поиска причин неудачных сборок.

Заключение



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

UPD: Перенес в «Тестирование», если проявится интерес хабрасообщества, напишу как оно все у нас сделано.
Tags:
Hubs:
+18
Comments 8
Comments Comments 8

Articles