Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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

cucumber
allure
java
Теги: #<Tag:0x00007f7b5fe57d38> #<Tag:0x00007f7b5fe57b80> #<Tag:0x00007f7b5fe57a40>

(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")) {
   // формируем скриншот
}