首页 > 解决方案 > 无法为并行运行的线程生成单独的 json 报告 - java + cucumber + testng

问题描述

尝试为两个线程中的每一个获取单独的 json cucumber 报告,但由于不是并行运行,因此只获得了一个包含两个线程的组合执行时间的报告。计划在不同设备上运行每个线程,并在获得每个单独设备的报告后。有没有办法为每个线程获取自己的 json 报告?

还尝试过:使用带有线程计数的 maven-surefire-plugin属性,但甚至无法运行并行线程。

我的pom.xml

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M5</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>parallelTests.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>

赛跑者

@CucumberOptions(
    plugin = {"pretty",
            "json:target/cucumber_report.json"},
    features = "features/",
    tags = "@test")
public class ParallelRun extends AbstractTestNGCucumberTests {
@Override
@DataProvider(parallel = true)
public Object[][] scenarios() {
    return super.scenarios();
}

测试xml

<suite name="Suite" parallel="tests" thread-count="2">
<test name="Thread 2">
    <classes>
        <class name="ParallelRun">
        </class>
    </classes>
</test>
<test name="Thread 1">
    <classes>
        <class name="ParallelRun">
        </class>
    </classes>
</test>

我试图获得带有黄瓜场景、步骤的单独 json 报告,然后将它们与Multiple Cucumber HTML Reporter或其他内容结合起来,但只获得一个带有报告的 json 文件用于一个线程

标签: parallel-processingtestngreportmaven-surefire-plugincucumber-java

解决方案


为了并行运行测试,您需要创建两个单独的运行器类,其中报告的名称应该不同,以避免覆盖 report.json

第 1 步:使用不同的 .json 文件名创建两个单独的 TestRunner 文件

跑步者1:

@CucumberOptions(
    plugin = {"pretty",
            "json:target/cucumber_report1.json"},
    features = "features/",
    tags = "@test")
public class ParallelRun extends AbstractTestNGCucumberTests {
    @Override
    @DataProvider(parallel = true)
    public Object[][] scenarios() {
        return super.scenarios();
    }

亚军2:

@CucumberOptions(
    plugin = {"pretty",
            "json:target/cucumber_report2.json"},
    features = "features/",
    tags = "@test")
public class ParallelRun extends AbstractTestNGCucumberTests {
    @Override
    @DataProvider(parallel = true)
    public Object[][] scenarios() {
        return super.scenarios();
    } 

第2步:更新xml文件如下

测试xml:

<suite name="Suite" parallel="tests" thread-count="2">
<test name="Thread 2">
    <classes>
        <class name="runner1">
        </class>
    </classes>
</test>
<test name="Thread 1">
    <classes>
        <class name="runner2">
        </class>
    </classes>
</test>

推荐阅读