Консольний cucumber та capybara за допомогою Selenium та Hudson

У наші дні розробники програмного забезпечення не можуть прожити без їх улюблених тестових фреймворків. Але чого розробники не хочуть — так це забезпечувати постійний запуск цих тестів. Також команди розробників не хочуть витрачати час на доведення результатів тесту до всіх.

З'являється все більше і більше корисних програм, бібліотек та плагінів, які частково полегшують головний біль, що виникає під час спроб зробити тести корисними для всієї команди. Прикладами чудових інструментів, які є у нашому розпорядженні, можуть бути 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 ми можемо піти далі і встановити веб-браузер.

$ apt-get install iceweasel

Перш, ніж ми продовжимо, нам потрібно налаштувати профіль браузера так, щоб він не ныл щодо закриття вкладок або відновлення після збою. Якщо цього не зробити, набір тестів зламається або працюватиме вічно.

/.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 були успішно встановлені і ми готові провести декількатестів.

Запуск cucumber

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

$ DISPLAY=:99.0 rake cucumber

Якщо все пройшло добре, тоді ми побачимо, що всі сценарії завершилися успішно. Якщо успішні не всі сценарії, перевірте спочатку, а чи добре в ситуації з нормальним графічним режимом.

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

Тепер ми прийшли до того, щоб спробувати з усією цією фігнею злетіти. Нам потрібно додати новий складальний крок до завдання, яке має запустити наш фоновий cucumber. Але перш ніж додавати складальний крок ми створимо стартовий скрипт для нашого віртуального фреймбуфера. Цей скрипт можна використовувати, щоб запустити буфер перед прогоном сценаріїв та зупинити буфер після завершення сценаріїв. Ви можете зберегти цей скрипт у /etc/init.d/. Переконайтеся, що права встановлені таким чином, що користувач, від якого працює Hudson, може виконати його.

XVFB=/usr/bin/Xvfb XVFBARGS="$DISPLAY -ac -screen 0 1024x768x16" P > 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 " 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: Переніс до «Тестування», якщо виявиться інтерес хабраспівтовариства, напишу, як воно все у нас зроблено.

Хардкорна конфа за С++. Ми запрошуємо лише профі.