Автоматизуємо тестування на базі Jenkins + Selenium

14.01.2015
Automated testing on Jenkins + Selenium basis
Автор:

Вітаю всіх. З часом виникає відчуття, що проект “дозрів” до такого рівня, коли вже слід починати думати про певний якісно новий крок в його розвитку. Цілком нормально, що на думку спадають такі питання: “Що в першу чергу хочеться бачити на сайті? Менше дефектів? Більший контроль за моніторингом якості?”. Тоді слід замислитись про впровадження CI.

Що таке CI? CI (розшифровується як “Continuous integration system” або система безперебійної інтеграції) — це система, яка дозволяє автоматизовувати певні процеси у розробці і контролі якості вашого проекту, що у свою чергу обіцяє “profit” і, теоретично, менший об'єм головного болю через можливий регрес.

Є різні системи безперебійної інтеграції, такі як Jenkins (В минулому Hudson. Про цю систему і ведеться зараз мова у цьому записі), Strider, Teamcity, Travis та ін. Щодо Jenkins, він був обраний через те, що є одним з найпростіших і найгнучкіших в експлуатації серед наявних. Також у цьому записі ми будемо акцентуватись виключно на “тестувальницьких можливостях” нашої CI, а саме — займатимемось впровадженням прив'язки Jenkins у парі з Selenium IDE тестами. Також врахуємо те, що основною ОС у нас є Ubuntu, тож орієнтуватись при налаштуванні будемо саме на цю операційну систему.

Отже, перш за все слід почати з безпосереднього встановлення Jenkins. Але перед цим треба додати сховище пакетів до того списку, що вже є в Ubuntu (щоб нормально відбувалось завантаження і оновлення). Для цього в командному рядку в терміналі прописуємо наступне:

sudo wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -

echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list

Тепер переходимо безпосередньо до інсталяції Jenkins. Для цього виконаємо наступні команди:

sudo apt-get update

sudo apt-get install jenkins

За замовчуванням ця CI встановлюється під порт 8080, тому для того, щоб увійти в її панель керування зайдіть за адресою:

http://localhost:8080

Якщо зірки і погода будуть сприятливими, завантажиться наступна сторінка: 

Мал.1. Головна сторінка Jenkins

Примітка: ніщо не заважає змінювати ім'я вашого локального хосту на щось більш привабливе оку, до прикладу на “jenkins.local”.

Чудово, перший етап позаду. Поки відкладемо знайомство з головною сторінкою і перейдемо до інсталяції решти необхідних нам компонентів. Розпочнемо з Selenium RC. По суті — це ядро, яке буде виконувати наші Selenium тести. Більше того, ми зможемо запускати їх не тільки звичними нам засобами Firefox, але й (перед цим завантаживши необхідні файли-драйверів) з допомогою chrome, IE і навіть Safari. Нам не потрібно його інсталювати. Все що слід зробити — завантажити відповідний jar файл, який можна знайти на офіційному сайті проекту. Помістимо його, наприклад, в

“var/lib/selenium/selenium-server.jar”.

Останнє, що лишилось встановити — xvfb, програму для віртуального створення і керування вікнами (наприклад, щоб вікно браузера, яке запускає Jenkins, не заважало іншій поточній сесії у тому ж браузері). Для цього в терміналі виконаємо наступні команди:

sudo apt-get update && sudo apt-get install -y xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic xvfb x11-apps imagemagick firefox

Як можна було помітити, крім самої програми ми встановили і необхідний набір шрифтів, який потрібен для її коректної роботи. Тепер необхідно прописати її в автозапуску операційної системи. Це слід зробити таким чином, щоб xvfb завантажувалась кожного разу зі стартом ОС. Для цього створимо необхідний скрипт і помістимо його в директорію “etc/init.d/”. Вміст нашого скрипту буде наступним:

#!/bin/bash

if [ -z "$1" ]; then

    echo "`basename $0` {start|stop}"

    exit

fi

case "$1" in

start)

    /usr/bin/Xvfb :99 -ac -screen 0 1024x768x8 &

;;

stop)

    killall Xvfb

;;

esac

Таким чином xvfb буде завантажувати віртуальне вікно з розширенням 1024x768x8 та ідентифікатором в 99 (можна задавати значення від 0 до 99). Після того, як ви скинули в текстовий редактор вказаний вище текстовий вміст, збережіть його під назвою “Xvfb”. Також слід зробити так, щоб ця програма автоматично завантажувалась при кожному старті ОС. Для цього в терміналі прописуємо: “sudo update-rc.d xvfb defaults”.

Тепер, перед тим як здійснити остаточну прив'язку до Jenkins, слід перевірити чи все працює, тобто чи драйвер браузера на місці, чи jar файл серверу Selenium RC присутній і чи приготовані в Selenium IDE тести нормально будуть опрацьовуватись в подальшому через налаштовану нами CI. Можемо задатись питанням: “Чому Selenium RC буде провантажувати тести не так як це робить Selenium IDE?”. В роботі цих двох програм дійсно є своя специфіка. Можна взяти до уваги і вік Selenium RC (який вже декілька років не оновлюється), і специфіку роботи ядра (якщо IDE нормально підтримує тільки Firefox, то RC може запускати тести під різні версії браузерів, навіть під Safari та IE), але про це все якщо і говоритимемо, то вже в окремому блог-пості.

Отже, для перевірки роботоздатності нашої “Пізанської вежі” в терміналі виконуємо наступну команду:

java -jar /var/lib/selenium/selenium-server.jar -htmlSuite *firefox http://вашсайт.com "/шлях/до/вашого/тестового/файлу-комплекту/.html" "/tmp/firefox-results.html"

А так все виглядало при пробному налаштуванні на нашій робочій станції:

java -jar /var/lib/selenium/selenium-server.jar -htmlSuite *firefox http://www.testingseleniumtests.com "/var/lib/selenium-jenkins/suite.html" "/tmp/firefox-results.html"

У разі успішного виконання всі попередніх кроків, має з’явитись два вікна — одне з Firefox сесією, а інше — з набором тестів Selenium RC, інтерфейс якого буде дуже нагадувати той, який є в Selenium IDE. Далі ці тести мають автоматично запуститися і виконуватися. Лишатиметься медитувати на це чарівне дійство (звісно, якщо наші тести не містять помилок, бо інакше насолода ризикує закінчитись не розпочавшись).

Тепер переходимо до нашого локального Jenkins'у. Перш за все слід встановити плагін theSeleniumHQ. Для цього з основного навігаційного меню переходимо на відповідну сторінку (або прописуємо /pluginManager/ в URL), обираємо вкладку Аvailable. Помічаємо наш плагін і внизу клікаємо по кнопці Download now and Install after restart

Мал.2. Перелік плагінів вражає

Тепер слід оголосити глобальні змінні для призначення вікнам в сесіях браузеру, які будуть запускатись, вірного ID (саме з цієї метою ми інсталювали Xvfb). Для цього з основного меню слід перейти на сторінку Configure System (або ж знову таки додавши /configure до адреси нашого локально CI). Помічаємо чек-бокс Environment Variables в полі прописуємо значення — “DISPLAY”(без дужок), а в полі value — “99” (теж без дужок) і зберігаємо значення сторінки. 

Мал.3. Задаємо глобальні змінні

Тепер слід створити новий проект, щоб прив'язати цю збірку для її автоматичного виконання. Перейшовши на головну нашої CI, обираємо New Job (посилання знаходиться у верхньому лівому кутку). Після цього ми маємо побачити наступну форму: 

Мал.4. Форма для створення нового проекту

У верхньому полі вводимо ім'я нашого проекту. Обираємо радіо-кнопку: “Build a free-style software project”. Вже в налаштуваннях проекту (/job/project_name/configure)вмикаємо чекбокс Build і заповнюємо поля відповідно до прикладу на скріншоті: 

Мал.5. Налаштовуємо білд

Ці налаштування вказують Jenkins, що тести будуть виконуватись під браузером Firefox і що домашня сторінка цільового сайту (тобто того, на якому будуть виконуватись тести) знаходиться за адресою testingsite.com. Також системі вказують, що файл з тестовим комплектом буде лежати за адресою “.../ім'я_проекту/tests/suite.html”. Також після завершення тестування білду, в нас буде генеруватись файл-звіт “reports.html”, який переміщується до теки “/ім'я_проекту/tests/reports/results.html” (теки в полі reports прописуються відносно до робочого простору Jenkins, що в даному випадку становить “/var/lib/jenkins/jobs/ім'я_проекту/reports”).

Основне налаштування Jenkins'у завершене. Тепер для прогону тестів слід лише клікнути на іконку, що зовні схожа на кнопку Play, і Jenkins сам запустить тести.

Взагалі, є й інші параметри, які можна задавати для чи після виконання нашого білду — це часовий інтервал, через якій будуть запускатись тести, можливість створити розсилання листів колегам по команді, щоб інформувати їх про проблеми з білдами (або забезпечити їх необхідним рівнем спаму), є можливість підключити Jenkins до спільного репозиторію, перевіряти код на відповідність стандартам і т.д. і т.п. Але це все потребуватиме значних зусиль і часу для освоєння і правильного налаштування. Корисно буде ознайомитись з наявним набором плагінів, за допомогою яких можна значно розширити можливості Jenkins.

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

4 votes, Рейтинг: 4.8

Subscribe to our blog updates