Печатные публикации

#30: Автоматизируем отчетность по Cucumber-тестам в Extent Report

Анна Сергеева. Автоматизируем отчетность по Cucumber-тестам в Extent Report // Системный администратор. 2016. № 5. С. 48-51.


Технология Cucumber позволяет не только совмещать спецификации на разработку и тестирование продуктов в одном источнике, но и удобно настроить автоматическое генерирование отчетов о прохождении таких тестов


Опубликовано в разделе "Разработка / Тестирование"



Эта же статья на сайте журнала


В последнее время среди инструментов автоматизации проектирования, разработки и тестирования ПО все большую популярность набирает технология Cucumber.


Главная ее особенность заключается в возможности выражать поведение программы естественным языком (gherkin) [1]. Таким образом, легко достигается более высокий уровень взаимного понимания и тесного сотрудничества между разработчиками, тестировщиками и заказчиками, ведь вся спецификация продукта и его тестовая документация, по сути, являются одним и тем же документом.


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


Вместе с тем для представления текущей ситуации по разрабатываемому проекту и принятия управленческих решений постоянно возникает необходимость документирования результатов проводимого тестирования.


То есть, помимо настройки запуска автоматических тестов, тестировщики обязаны регулярно формировать производственные отчеты, которые публикуются на внутренних сетевых ресурсах и в качестве официальных внутренних документов компании предоставляются руководству. Разумеется, создание таких отчетов также следует автоматизировать.


В данной статье пойдет речь о том, как генерировать отчеты о прохождении Cucumber-тестов в автоматическом режиме.


Как вести отчетность для Cucumber-JVM?


Технология Cucumber имеет ряд реализаций, среди которых распространение получила Cucumber-JVM [2]. Она предназначена для наиболее популярных языков виртуальных машин Java (JVM), таких как Java, JavaScript, Groovy, Jython, Jruby, и т.д.


Каждый тестировщик, работающий с Cucumber-JVM, рано или поздно сталкивается с вопросом: как же настроить формирование пользовательских отчетов, например, в одном из самых распространенных форматов — html? Можно, конечно, потратить время на изучение и исследование множества деталей и реализовать собственный генератор отчетов, поместить его в библиотеку и в таком виде подключать к своим тестовым проектам. Однако, существуют и готовые решения, экономящие время и бюджет, поскольку многие из них находятся в открытом доступе.


Готовый вариант — библиотека ExtentReports


Одним из наиболее доступных решений является использование готовой совместимой библиотеки с открытым исходным кодом ExtentReports. Она реализует автоматическое создание html-отчетов о прохождении тестов на таких платформах как Java, .Net и Ruby [3].


Помимо свободного распространения, ее достоинство еще и в том, что итоговые сгенерированные документы включают достаточно детальное описание результатов обработки. Именно то, что представляет интерес для QA-специалистов. К тому же, удобный для восприятия формат отображения данных по достоинству оценят руководители продуктов и проектов разработки ПО.


На рис. 1 приведен пример сгенерированного отчета.



Рис. 1. Отчет о результатах тестирования, сгеренированный в ExtentReports


Результаты логически сгруппированы по закладкам и отображаются в виде таблиц с настаиваемой фильтрацией, а также в виде линейных и круговых диаграмм.


Отображаются данные об общем количестве тестов (Total Tests/Total Steps) с разбиением на диаграммы, в зависимости от статуса результата (общепринятые варианты: Pass/Fail/Fatal/Error/Warning/Info/Skip/Unknown) и с отображением общего показателя успеха прохождения всего тестового набора (Pass Percentage).


Приводятся метрики общего времени суммарного и текущего прогона тестов (Total Time Taken (Overall /Current Run)), время старта и завершения обработки (Start/Stop).


Дополнительно, доступна информация о тестовой среде (Environment) и об обработанных категориях тестов (Categories).


Объединяем возможности ExtentReports и Cucumber


На многих профессиональных форумах можно найти обсуждение специфики использования ExtentReports в качестве перехватчика (listener) для Java-тестов, обрабатываемых во фреймворке TestNG.


Что же касается взаимодействия с виртуальной машиной Java, Cucumber-JVM, применяемой для обработки Cucumber-кода, полезную информацию отыскать значительно сложнее.


Тем не менее, существует и успешно используется в автоматизации тестирования специально разработанный плагин CucumberExtentReporter. Его исходный код доступен для свободного копирования на ресурсе [4].


Подключение CucumberExtentReporter в проект


Если для сборки проектов запуска тестов применяется фреймворк Apache Maven, то следует добавить в файл описания проекта pom.xml зависимость от внешней библиотеки, которая будет генерировать пользовательские отчеты:


<dependency>

<groupId>com.vimalselvam</groupId>

<artifactId>cucumber-extentsreport</artifactId>

<version>1.0.0</version>

</dependency>


Если Apache Maven для сборки проекта не используется, можно скачать jar-файл с сетевого ресурса [5] и добавить путь к нему в значение переменной CLASSPATH.


Настройка параметров класса запуска


При использовании Cucumber-JVM создается класс запуска тестов (раннер), в который нужно добавить параметры использования плагина.


По умолчанию, без указания аргументов для ExtentCucumberFormatter, отчеты будут создаваться в директории {project directory}/output/Run_{timestamp}/report.html.


@RunWith(Cucumber.class)

@CucumberOptions(plugin = {"com.cucumber.listener.ExtentCucumberFormatter:"})

public class RunCukesTest {

}


Здесь важно следить за указанием символа двоеточия в конце значения, поскольку это обязательное требование Cucumber.


Также, можно размещать генерируемые отчеты в любом другом месте, конкретно указав его в значении параметра ExtentCucumberFormatter:


@RunWith(Cucumber.class)

@CucumberOptions(plugin = {"com.cucumber.listener.ExtentCucumberFormatter:output/report.html"})

public class RunCukesTest {

}


В данном примере, отчет с именем report.html будет размещен в директории output текущего проекта.


Допускается указывать неполный набор тестов для запуска, например, так можно запустить все тесты с тегом @search, находящиеся в директории /examples, и разместить отчет в директории /search:


@RunWith(Cucumber.class)

@Cucumber.Options(features = "target/test-classes/cucumber/examples/", tags = {"@search"}, format = {"html:target/cucumber-report/search"})

public class RunCukesTest {

}


Объединяем отчеты с ExtentMerge


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


Они предлагают свободно распространяемое консольное приложение ExtentMerge, которое на базе набора html-отчетов дает возможность просматривать историю прохождения наборов тестов, анализировать каждый интересующий запуск, выполнять сравнение и оценивать статистику успешных и неуспешных исходов обработки.


Так, например, на рис. 2 показаны тренды по статусу результатов запуска по тестам и по функциональным шагам (Report Trends By Status – Test/Step), список наиболее популярных успешно/неуспешно пройденных тестов (Top Passed/Top Failed).


Рис. 2. Объединение результатов тестирования в ExtentMerge


Для более гибкой работы с приложением определен набор документированных ключей командной строки (табл. 1).


Таблица 1. Набор ключей командной строки для запуска ExtentMerge.


Ключ

Описание

-h, --help

Доступ к помощи по работе с приложением

-v, --version

Отображение текущей версии приложения

-css

Указание встроенного CSS-скрипта

-css-file

Путь к пользовательскому CSS-скрипту

-dir

Директория размещения набора html-отчетов, сгенерированных в ExtentReports

-from

Начальная дата сбора данных

-html

Конкретный html-отчет, сгенерированный в ExtentReports

-js

Указание встроенного JS-скрипта

-js-file

Путь к пользовательскому JS-скрипту

-out

Путь к итоговому файлу с расширением .html

-to

Конечная дата сбора данных


Приведем несколько примеров удобного настраиваемого запуска ExtentMerge.


Можно просканировать все содержимое директории C:\MyDirectory, найти в ней все допутимые html-файлы, сгенерированные в ExtentReports, и поместить сводный отчет ExtentMerge.html в директорию C:\PublicDirectory:


java -jar extentmerge.jar -dir "C:\MyDirectory" -out "C:\PublicDirectory\ExtentMerge.html"


Для объединения данных из конкретных html-отчетов нужно указать каждый из них:


java -jar extentmerge.jar -html "C:\MyDirectory\Report1.html" -html "C:\MyDirectory\Report2.html" -out "C:\PublicDirectory\ExtentMerge.html"


Допускается включение в сводный отчет данных только за указанный период времени. Обязательное требование — границы интервала необходимо задавать в формате: 'yyyy-MM-dd hh:mm:ss'.


java -jar extentmerge.jar -dir "locataion" -out "extent.html" -from "2016-01-02 00:00:00" -to "2016-03-04 23:59:59"


Нередко для кастомизации сводных отчетов удобно подключать собственные CSS и JS-скрипты. Можно указать внешний готовый скрипт:


java -jar extentmerge.jar -dir "location" -out "extent.html" -css-file "css.css"

Или:

java -jar extentmerge.jar -dir "location" -out "extent.html" -js-file "script.js"


Также можно применить встроенный скрипт, прописав его непосредственно в командной строке, например, так:


java -jar extentmerge.jar -dir "location" -out "extent.html" -css ".tag { display: none; }"

Или так:

java -jar extentmerge.jar -dir "location" -out "extent.html" -js "$(document).ready(function() { alert('hello world'); });"


… или ExtentX Server


В качестве альтернативы консольному приложению ExtentMerge, разработчики ExtentReporter предлагают новый совместимый плагин ExtentX Server, который подключается в Maven POM-файле с помощью exec-maven-plugin. Он реализует веб-сервер для хранения отчетов и отображения результатов в виде удобных для восприятия дашбордов, объединяющих данные из множества html-файлов.


Среди поддерживаемых браузеров заявлены Chrome 35+, Firefox 31+, Safari 7+, IE 10+.


Например, итоговый сводный отчет может выглядеть, как показано на рис. 3. Кроме метрик, отображаемых в ExtentMerge, здесь также доступны сводные показатели для последних запусков тестов, сгруппированные по именам тестов и по статусу результата (Reports/Analysys (Last 5 Runs)), и указаны обработанные категории тестов (Categories).


Рис. 3. Объединение результатов тестирования в ExtentX Server


К моменту написания статьи ExtentX Server находится на завершающей стадии реализации и доступен только для ознакомления [6].


Однако, современные темпы разработки ПО, особенно что касается всевозможных утилит и плагинов с открытым исходным кодом, позволяют смотреть в будущее с определенным оптимизмом. Автор не исключает, что к моменту публикации данной статьи ExtentX Server уже будет завершен и доступен для полноценного использования.


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


Литература


[1] Сайт разработчиков технологии Cucumber - https://cucumber.io

[2] Ресурс с Cucumber-JVM - https://github.com/cucumber/cucumber-jvm

[3] Сайт разработчиков библиотеки ExtentReports - http://extentreports.relevantcodes.com

[4] Ресурс с плагином CucumberExtentReporter - https://github.com/email2vimalraj/CucumberExtentReporter

[5] Ресурс с плагином CucumberExtentReporter в формате jar - http://search.maven.org/remotecontent?filepath=com/vimalselvam/cucumber-extentsreport/1.0.0/cucumber-extentsreport-1.0.0.jar

[6] Пример реализации ExtentX Server - http://extentx.herokuapp.com


Ключевые слова


Автоматизированное тестирование, генерирование отчетов, Cucumber, gherkin, Cucumber-JVM, Java, ExtentReports, CucumberExtentReporter, ExtentMerge, ExtentX Server.