[Из песочницы] Путь к непрерывной интеграции. Selenium IDE Tests + TeamCity
Вступ Рассмотрим интегрирование тестов Selenium IDE в процесс непрерывной интеграции с помощью TeamCity. В многих местах встречал когда QA создает тести (в лучшем случае, зачастую бывает когда кликери просто по документу «прокликивают» проект и делает отчеты) и регулярно запускают их, и как правило все это происходит локально на его же компьютере. Как на меня абсолютно не системный подход, который (сейчас то, в 2014 году) решается миллионом решений для полной автоматизации процесса.Ну раз Continuous Integration такая популярная практика, почему же не внедрить функциональное тестирование в процесс непрерывной интеграции, облегчить жизнь тестировщикам и поднять уровень качества продукта в целом.Что надо и чего хотим Что есть? CI сервер (TeamCity) для сборки и деплоймента проектов QA с пачкой тестов созданных в Selenium IDE Энтузиазм Что надо? Добавить в процесс непрерывной интеграции исполнение Selenium IDE тестов Как установить, настроить и сделать первые билд конфигурации на просторах больше чем надо, потому описывать не буду, да и речь не об этом.Прошу под кат.
Подготовка и конфигурация билд агента В качестве билд агента била установлена Windows машина, на которой установлен TeamCity Agent и подцеплен в TeamCity серверу.Делаем следующие шаги, для настройки среди для исполнения: Все манипуляции будут происходить в «C:\Selenium» потому создаем там одноименный каталог.На данной машине должен бить поднят selenium server standalone, который для удобства хорошо б установить в винде как службу, так как ручной вызов не совсем комильфо. Сделать можно з помощью утилиты nssm («Non-Sucking Service Manager»).Качаем, распаковываем и кладем в «C:\Selenium».Качаем selenium-server-standalone и ложем туда же (последнюю на момент написания можно скачать отсюда).Устанавливаем Selenium Server как службу
C:\Selenium\nssm-2.16\win64\nssm.exe install Selenium-Server «C:\Program Files (x86)\Java\jre7\bin\java.exe» »-jar C:\Selenium\selenium-server-standalone-2.42.2.jar» В качестве «исполнителя» build step используем NUnit (тести из Selenium IDE будем экспортировать в .cs с последующей компиляцией в dll библиотеки), потому так же на машине устанавливаем .NET Framework 4 (если нет, взять можно отсюда).После установки ищем путь к csc.exe, который лежит в
«C:\Windows\Microsoft.NET\Framework\v4.0.<еще пара циферок с версией>» и прописываем его в переменные среди для возможности глобального вызова.Устанавливаем Mozilla Firefox так как будет использоваться настройках конекшна.Для того чтоб csc смог скомпилировать экспортирование тести, нужно скачать и положить некое количество дополнительных библиотек и положить в «C:\Selenium» (процесс компиляции будет происходить автоматически с этого каталога). Вот тут можно их взять.Качаем и распаковываем в «C:\Selenium».На этом подготовка билд агента закончена, можно приступать к конфигурации билда для запуска тестов.
Конфигурирование TeamCity
Идем в админку ТимСити, и жмакаэм создать проект, вводим имя, id, дескрипшн и «Create»
Попадаем на страницу настройки нового проекта, и жмем «Create Build Configuration», заполняем знакомые уже три поля и опять же синяя кнопка
После создания билд конфигурации попадаем на экран выбора существующего репозитория, или как в нашем случае, так как нету подключенных репозиториев, создания нового. Хорошей практикой будет «подцепить» репозиторий с живим проектом (с него же забирать написание тести и в последствии компилировать и запускать), дабы следить за изменениями в репозитории и триггерить на изменения кода (непрерывная интеграция же), но так как тут показываю «демо», то мы подключим «левый» репозиторий, и не будем его чекаутить. Наша цель — запустить тести и получить репорт.
Подцепляем любой репозиторий (как вариант открытий репозиторий з github/bitbucket), тестируем подключение, и опять же «Create»:
Попадаем в окно с конфигурированием репозиториев билда (я установил VCS checkout mode: как Do not checkout files automatically, чтоб не следить за ненужным репозиторием):
Приступаем к самому интересному. Тут я сделаю два шага, первый запустит компилирование тестов из исходников (.cs) в библиотеки для NUnit, и второй уже запуск тестов NUnit’ом.
Переходим на следующую табу настроек билда «Build Steps», и додаем первый шаг кнопкой «Add build step», в списке «Runner type » ищем «Command Line» и выбираем его. Вводим название шага, в вставляем в поле скрипта следующее:
csc /t: library /r: WebDriver.Support.dll /r: WebDriver.dll /r: ThoughtWorks.Selenium.Core.dll /r: Selenium.WebDriverBackedSelenium.dll /r: nunit.framework.dll /r: System.Data.dll /r: System.Data.Services.Client.dll /out: «C:\Selenium\compiled_test.dll» «C:\Selenium\reg.cs» И жмем «Save«Скрипт запустит компилятор, запустит компиляцию экспортированного теста с Selenium IDE, который лежит по пути «C:\Selenium\reg.cs» и положит скомпилированную библиотеку в файл «C:\Selenium\compiled_test.dll», который мы в следующем шаге передадим NUnit’у.
Добавляем еще один build step, только как runner выбираем уже NUnit.Заполняем как на скриншоте и в Run tests from: прописываем путь, по которому первый шаг положит скомпилированный тест, в нашем случае «C:\Selenium\compiled_test.dll» — и сохраняемся.
В итоге получим следующее:
Поздравляю, минимальная конфигурация завершена, остается только написать первый тест и запускать его исполнение.
Создание первого теста
Просим QA накликать простенький тест в Selenium IDE и экспортируем его в «С# / NUnit / Remote Control».
Единственное, что надо было поправить — это настройки подключения к веб браузеру.
Привожу пример теста.
using System; using System.Text; using System.Text.RegularExpressions; using System.Threading; using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Firefox; using Selenium;
namespace SeleniumTests
{
[TestFixture]
public class open_page
{
private IWebDriver driver;
private ISelenium selenium;
private StringBuilder verificationErrors;
[SetUp]
public void SetupTest ()
{
verificationErrors = new StringBuilder ();
//driver = new FirefoxDriver (); — что подсунул сгенерированный тест
driver = new FirefoxDriver (new FirefoxBinary (@«C:\Program Files (x86)\Mozilla Firefox\firefox.exe»), new FirefoxProfile (), TimeSpan.FromMinutes (10)); // прохардкожений путь к существующему firefox
selenium = new WebDriverBackedSelenium (driver, «http://habrahabr.ru/»);
selenium.Start ();
}
[TearDown]
public void TeardownTest ()
{
try
{
driver.Close ();
}
catch (Exception)
{
// Ignore errors if unable to close the browser
}
Assert.AreEqual (string.Empty, verificationErrors.ToString ());
}
[Test]
public void TheOpen_pageTest ()
{
selenium.Open (»/»);
selenium.Click («link=О сайте»);
selenium.WaitForPageToLoad (»30000»);
}
}
}
Смотрим результат
Заходим в ТимСити в жмем Run напротив нашего билда, ждем выполнение теста и радуемся результату. Билд зеленый, 1 тест пройден.
P.S. Как выше упоминал, пишем тести, кладем в репозиторий проекта, триггерим сборку проекта по каждому комиту, после сборки забираем тести, компилим и запускаем и в случае успеха делаем post comit хук на push в репозиторий и возможно даже деплоймент на staging окружение. И все это полностью автоматически.