Использование Яндекс Allure в качестве инструмента сбора отчетности
1) Генерация XML файла с результатами выполнения теста
- убедиться, что установлен NUnit версии 2.6.3 (внимание, это важно, так как с версией 2.6.4 allure На текущий момент не работает), если нет – скачать отсюда - http://www.nunit.org/index.php?p=download и установить
- скачать последний релизный allure адаптер для NUnit - https://github.com/allure-framework/allure-nunit/releases
- распаковать скачанный архив в %NUnit_installation_directory%\bin\addins (например - C:\Program Files (x86)\NUnit 2.6.3\bin\addins)
- в файле конфигурации config.xml в параметре <results-path> указать путь до папки, в которую будут складываться результаты выполнения теста (также в файле конфигурации можно указать необходимость создания скриншотов)
- выполнить тесты в NUnit GUI или в консоли nunit-console, используя .NET 4.0 (например, nunit-console YourAssembly.dll /framework=net-4.0)
- после того, как завершится исполнение тестов файл создастся в папке, указанной ранее в параметре <results-path>
2) Получение отчета из сгенерированного xml файла
- скачать последнюю версию allure-cli отсюда - https://github.com/allure-framework/allure-cli/releases/tag/allure-cli-2.3
- установите jdk - http://www.oracle.com/technetwork/java/javase/downloads/index.html
- создайте новую системную переменную JAVA_HOME, указывающую на папку с установленным jdk, например - C:\Progra~1\Java\jdk1.8.0_31 (подробно процесс создания новой переменной описан здесь - https://confluence.atlassian.com/display/DOC/Setting+the+JAVA_HOME+Variable+in+Windows )
- распаковать архив в папку с названием allure-cli
- перейти в папку bin, создать в ней исполняемый файл run.cmd, состоящий из следующих команд:
allure.bat generate -v 1.4.1 D:\test-results-allure\
pause
вместо D:\test-results-allure\ необходимо указать свой путь до папки с xml файлами, сгенерированными на первом шаге
- запустите run.cmd
- после его выполнения в папке bin создастся папка allure-report, содержащая файл index.html, который и является страницей отчета
Шаблон проектирования “Page Object”
Основная идея паттерна Page Objects инкапсулировать логику поведения страницы в классе страницы. Таким образом, тесты будут работать не с низкоуровневым кодом технического драйвера, а с высокоуровневой абстракцией.
Основные преимущества Page Objects:
1. Разделение полномочий: вся «бизнес-логика» страницы должна помещаться в Page Objects, классы тестов лишь вызывают публичные методы и проверяют результат
2. DRY – все локаторы помещаются в одном месте. Когда UI изменится, то мы изменим локатор лишь в одном месте
3. Скрытие слоя технического драйвера. Тесты будут работать с высокоуровневой абстракцией. В будущем, возможно, вы захотите сменить драйвер: например, использовать PhantomJS, или вообще для каких-то участков отказаться от использования WebDriver, для улучшения производительности. В этом случае, придется заменить только код Page Objects. Тесты останутся неизменными
4. Page Objects позволяет записать локаторы в декларативном стиле
За основу реализации в проекте взята данная статья - http://habrahabr.ru/post/155109/ Пример реализации проекта по данной статье доступен по ссылке - https://github.com/DmitryRoss/Page-Object-Model-Article
Обязательные составляющие проекта:
- класс BaseObject, в котором инициализируются страницы:
public class BaseObject
{
public static RemoteWebDriver Driver;
public static DefaultSelenium Selenium;
public static void InitPage<T>(T pageClass) where T : BaseObject
{
PageFactory.InitElements(Driver, pageClass);
}
}
- класс BaseTest, который наследуется от BaseObject. В нем объявляются блоки TestFixtureSetUp, TestFixtureTearDown, SetUp, TearDown. В TestFixtureSetUp объявляется соответствующий драйвер и его настройки, в TestFixtureTearDown осуществляется закрытие драйвера, в SetUp – переход на главную страницу системы, в TearDown – проверка страницы на наличие ошибок, а также проверка на наличие ошибок в консоли.
- в классе Utils (также наследуется от BaseObject) – содержатся функции и переменные, общие для всех страниц системы, например - адреса определенных страниц, а также служебные функции (функция ожидания)
Для тестирования страницы создаются следующие классы (на примере тестирования входа в систему):
1) Класс с описанием самих элементов страницы – LoginPage (наследуется от BaseObject)
Структура данного класса следующая:
- локаторы страницы: public const string USER_NAME_TEXT_FIELD = "//input[@id='login']";
- объявление соответствующего веб=элемента для локатора:
[FindsBy(How = How.XPath, Using = USER_NAME_TEXT_FIELD)]
public IWebElement userNameTextField;
- функция инициализации данной страницы:
public static LoginPage GetLoginPage()
{
LoginPage loginPage = new LoginPage();
InitPage(loginPage);
return loginPage;
}
- функции работы с элементами страницы:
public LoginPage TypeUserName(string userName)
{
userNameTextField.SendKeys(userName);
return GetLoginPage();
}
2) Класс помощник helper (Каждый такой класс обслуживает один конкретный класс с тестами) - LoginHelper
Структура класса:
- инициализация страницы(страниц):
private LoginPage loginPage = new LoginPage();
- функции, обращающиеся к элементам страницы:
public LoginHelper DoLogin(string userName, string password)
{
BaseObject.InitPage(loginPage);
loginPage.LogOff().
TypeUserName(userName).
TypePassword(password).
ClickLoginButton();
return this;
}
3) Класс теста – LoginTest
Структура:
- инициализация helper’а:
private static LoginHelper loginHelper = new LoginHelper();
- сам тест (он состоит из обращений к функциям helper’а):
[Test]
public static void AssertLogin()
{
string userName = "admin";
string password = "";
string displayedUserName = "Администратор";
string Welcome_text = "Добро пожаловать в систему ELMA!";
loginHelper.
DoLogin(userName, password).
AssertUserName(displayedUserName).
AssertHomePage(Welcome_text);
}
4) Класс со вспомогательными функциями (используемыми только для данной страницы, общие вспомогательные функции объявляются в Utils) - LoginUtils