编程语言
首页 > 编程语言> > Java-Cucumber.json报告被重新运行方案报告覆盖

Java-Cucumber.json报告被重新运行方案报告覆盖

作者:互联网

我有UI测试项目和具有相同技术栈(JAVA1.8,Cucumber-JVM,JUnit,Maven)的API测试项目,并且两个项目都向我展示了这个问题.可能是因为两者中都存在相同的依赖关系集.

我已经使用了使用maven-surefire-plugin内置功能< rerunFailingTestsCount> 1< / rerunFailingTestsCount>的Flaky测试重新运行机制.另外,我基于< groupId> io.cucumber< / groupId>添加了黄瓜依赖性.而不是< groupId> info.cukes< / groupId>.这两个都有自己的版本的cumulage-java和cumulage-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文件.maven-surefire插件(v_2.21.0)和io.cucumber v_2.4.0的内置机制也可以完美运行,并且如果任何情况在第一个执行过程中失败,它会自动重新运行,而无需将其记录在rerun.txt文件中.

##问题在##

我的功能文件中有5个场景.如果所有这些都通过第一轮.它成功地使用了cumul.json报告生成了显示所有5种情况的报告.
但是,如果(例如)5个场景中有2个失败,并且这些场景在重新运行机制中自动执行,cumulative.json报告文件将仅记录这两个场景的结果,而不记录所有5个场景的结果.如果这两个方案通过重新运行,则总体构建通过;如果这两个方案失败,则构建失败.没错,但是我的问题是Cucumber.json被重新运行机制覆盖了.
我尝试使用maven-cucumber-reporting插件v_3.16.0,但是它实际上读取了cumber.json文件本身,因此无法解决我的问题.任何帮助,将不胜感激.

解决方法:

好消息是您没有做错任何事!

坏消息是您观察的结果完全符合预期.这是将不同的工具(Surefire-> JUnit-> Cucumber)链接在一起的自然结果,这些工具原本互不了解.从Cucumber的角度来看,重新运行似乎是全新的执行,因此很高兴会覆盖旧的报告.仅在链的开始,才可以创建准确的报告.

因此,从最小到最大的努力,从最坏的到最好的质量,您可以选择:

>使用Surefire生成的报告.
>编写自己的插件来附加结果,而不是覆盖它们.
>参与黄瓜项目,并从根本上帮助解决这一问题.

编辑:删除了使用cucumber-jvm-parallel-plugin为每种情况创建单独的单元测试的建议.这实际上是行不通的.

标签:cucumber-jvm,maven,cucumber,java,test-reporting
来源: https://codeday.me/bug/20191109/2011306.html