У меня есть проект UI Test и проект API-тестирования с одним и тем же технологическим стеком (JAVA1.8, Cucumber-JVM, JUnit, Maven), и оба проекта показывают мне эту проблему. Возможно потому, что в обоих случаях присутствует один и тот же набор зависимостей.
Я использовал механизм повторного запуска теста Flaky, используя встроенную функциональность maven-surefire-plugin <rerunFailingTestsCount>1</rerunFailingTestsCount>
. Кроме того, у меня есть огуречные зависимости, основанные на <groupId>io.cucumber</groupId>
, а не <groupId>info.cukes</groupId>
. Оба они имеют свои собственные версии зависимостей cucumber-java и cucumber-jvm.
Мой POM.XML выглядит следующим образом.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<rerunFailingTestsCount>1</rerunFailingTestsCount>
</configuration>
<executions>
<execution>
<id>acceptance-test</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<forkCount>1</forkCount>
<reuseForks>true</reuseForks>
<includes>
<include>**/*Runner.class</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-spring</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-jvm</artifactId>
<version>2.4.0</version>
<type>pom</type>
</dependency>
ТОЛЬКО КОД ФАЙЛА РАБОТЫ
@RunWith(Cucumber.class)
@ContextConfiguration(locations = {"file:/src/test/resources/spring-config.xml"})
@CucumberOptions(
glue = "com.test.uitest",
features = "classpath:cucumber",
tags = {"~@ignore","@ui_home"},
monochrome = true,
plugin = {"pretty", "html:target/cucumber-reports",
"json:target/cucumber-reports/cucumber.json",
"rerun:target/rerun.txt"} //Creates a text file with failed scenarios
)
public class AllTestsRunner {
}
Теперь, очевидно, мне нужен еще один бегун со следующим кодом (как в других форумах и темах здесь, в StackOverflow)
@RunWith(Cucumber.class)
@CucumberOptions(
monochrome = true,
glue = "com.test.uitest",
features = "@target/rerun.txt", //Cucumber picks the failed scenarios from this file
format = {"pretty", "html:target/rerun-reports",
"json:target/cucumber-reports/rerun-report.json"}
)
public class FailedTestsRunner {
}
Но мне не нужен этот второй бегун, так как механизм перезапуска работает совершенно блестяще, когда на верху только один бегун. Даже нет необходимости в файле rerun.txt, сгенерированном в 1-ом бегунке. Механизм встраивания в плагине maven-surefire (v_2.21.0) вместе с io.cucumber v_2.4.0 работает отлично, и если какой-либо сценарий не выполняется во время 1-го выполнения, он запускается автоматически без записи в файл rerun.txt.
## ПРОБЛЕМА ЕСТЬ ##
В моем файле возможностей есть 5 сценариев. Если все они пройдут в 1-й серии. Он успешно генерирует отчет с отчетом cucumber.json, показывающий все 5 сценариев.
Но если (скажем) 2 из 5 сценариев завершаются неудачно и эти сценарии выполняются автоматически с помощью механизма повторного запуска, файл отчета cucumber.json записывает только результаты этих двух сценариев, а не все 5 сценариев. Общая сборка ПРОЙДЕТ, если эти 2 сценария пройдут повторно, или НЕУДАЧИ, если эти 2 сценария потерпят неудачу. Это правильно, но моя проблема в том, что cucumber.json перезаписывается механизмом перезапуска.
Я пытался использовать плагин maven-cucumber-reporting
v_3.16.0, но он фактически читает сам файл cucumber.json и, следовательно, не решает мою проблему. Любая помощь будет оценена.