Allure+Cucumber-jvm: прикрепление Attachment'ов к упавшему шагу в отчёте Allure в зависимости от тега cucumber-feature

cucumber
java
allure
Теги: #<Tag:0x00007f7b60c57000> #<Tag:0x00007f7b60c56ec0> #<Tag:0x00007f7b60c56c90>

(Artem From Moscow) #1

Добрый день!
Стоит задача прикреплять Attachment’ы к отчёту Allure для упавших шагов (а не сценариев!), в зависимости от тега, которым был помечен сценарий. Например, для сценариев, помеченных тегом @frontend нужно к упавшему шагу прикреплять скриншот, а для сценариев, отмеченных тегом @backend - REST-запрос, который был отправлен серверу.
Сейчас задача решается с помощью передачи соответствующих системных свойств при запуске теста. Например, так:

mvn test -Dcucumber.options="@frontend",

и считывания данных системных свойств в процессе падения шага.
Для этого был реализован собственный Listener с переопределением метода testFailure() следующим образом:

public class CustomAllureRunListener extends AllureRunListener {

@Override
public void testFailure(Failure failure) {
    super.testFailure(failure);
    if (!failure.getDescription().isSuite()) {
        String cucumberOptions = System.getProperty("cucumber.options");
        if (cucumberOptions.contains("@frontend")) {
            // делаем скриншот и прикрепляем к отчёту Allure
        }
        else if (cucumberOptions.contains("@backend")) {
            // прикрепляем request к отчёту Allure
        }
    }
}

Но это решение работает только если мы передаём теги для cucumber через системные свойства. Но если мы вписываем теги в ‘@CucumberOptions(tags = {"@backend"})’, то условия, описанные выше в java-коде уже не срабатывают.
Есть какой-либо программный метод в cucumber-jvm или allure запросить, с каким тэгом был запущен данный сценарий и, соответственно, шаг в нём, чтобы реализовать условие, по которому бы формировался @Attachment, который будет прикрепляться к упавшему шагу в Allure-отчёте?
Чтобы было что-то типа:

if (failure.getTags().contains("@frontend")) {
   // формируем скриншот
}

Отображение упавших шагов в отчете Allure
(Pak Aleksey) #2

Вы нашли решение? У меня такая же дилема, но я дошел до того, что в @Before надо передать 2 аргумента, но он принимает только 1(


(Valentin G ) #3

Как вариант, можно сделать отдельный класс TestConfiguration, куда вставить такие данные, как тип теста, линк на проект, еще что необходимое, на основании тегов. Инициировать данный класс в BeforeScenario и сделать его доступным через Dependency injection либо как статический (зависит от типа фреймворка). Потом уже, либо в AfterStep, либо в Listerner, делать действия, на основании данных в данном классе. Я так делаю, используя SpecFlow (Cucumber for .net).