Анна Сергеева. Автоматизируем отчетность по 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.