有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用Cucumber为每个正在运行的线程创建一个TestNG runner类

我正在编写一个使用TestNG和Appium的框架,以便并行进行移动应用程序测试。现在我正在尝试将Cucumber实现到框架中,这需要一个TestNG runner类来运行Cucumber测试(见下文)

package org.cucumber.tests;

@CucumberOptions(
        features="src/test/resources/features",
        glue={"org.cucumber.stepdefs"},
        plugin = {
        "com.cucumber.listener.ExtentCucumberFormatter:" }, monochrome = true)

public class TestNGRunner extends BaseTest {

    private static TestNGCucumberRunner testRunner;

    @BeforeClass
    public void setUP() {   
        testRunner = new TestNGCucumberRunner(TestNGRunner.class);
        ExtentProperties extentProperties = ExtentProperties.INSTANCE;
        extentProperties.setReportPath("output/" + this.hashCode() + "-report.html");
    }

    @Test(description="Tests",dataProvider="features")
    public void setUpClass(CucumberFeatureWrapper cFeature) {
        testRunner.runCucumber(cFeature.getCucumberFeature());
    }

    @DataProvider(name="features")
    public Object[][] getFeatures() {
        return testRunner.provideFeatures();
    }

    @AfterClass
    public static void teardown() {
        testRunner.finish();
    }

}

我使用ThreadLocal AppiumDriver(WebDriver)实例在每个连接的移动设备上并行运行测试,并在testNG中指定参数。在<test>标记内的xml文件,并将并行度设置为“tests”,例如:-

<suite name="Parallel Testing" verbose="1" parallel="tests">

        <test name="Samsung Galaxy S7">
        <parameter name="platform" value="Android 6.0.1" />
        <parameter name="udid" value="#############" />
        <parameter name="browserName" value="Chrome" />
        <parameter name="chromeDriverPort" value="9515" />
        <parameter name="systemPort" value="8201" />
        <parameter name="deviceName" value="Samsung Galaxy S7" />

    <packages>
      <package name="org.cucumber.tests"/>
    </packages> 
 </test> 

 <test name="Nexus 6P">
    <parameter name="platform" value="Android 7.1.1" />
    <parameter name="udid" value="########" />
    <parameter name="browserName" value="Chrome" />
    <parameter name="chromeDriverPort" value="9516" />
    <parameter name="systemPort" value="8202" />
    <parameter name="deviceName" value="Nexus 6P" />
<packages>
  <package name="org.cucumber.tests"/>
</packages> 

当涉及到使用ExtentReports生成报告时,来自每个运行线程的所有测试都放在同一个报告中——参见下面的示例

Extent Report

我的理解是ExtentProperties.INSTANCE在每个运行的线程之间共享,因此文件路径总是被覆盖

我想要的是每个正在运行的线程的独立报告,这将导致每个连接的移动设备的报告

大概我需要做的是为每个正在运行的线程创建一个单独的TestNGRunner类实例。我的问题是——这真的可能吗?如果可能,我需要改变我的方法吗


共 (0) 个答案