我正在编写一个使用TestNG和Appium的框架,以便并行进行移动应用程序测试。现在,我正在尝试将Cucumber实现到框架中,该框架需要一个TestNG运行器类才能运行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)实例在每个连接的移动设备上并行运行测试,并在<test>
标签内的testNG.xml文件中指定参数,并将并行性设置为“测试”,例如:
<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生成报告时,来自每个运行线程的所有测试都放在同一个报告中-参见以下示例。
我的理解是ExtentProperties.INSTANCE
在每个运行线程之间共享,因此文件路径始终被覆盖。
我想要的是每个运行线程的个人报告,该报告将为每个连接的移动设备生成报告。
大概我需要做的是为每个正在运行的线程创建一个TestNGRunner类的单独实例。我的问题是-这是否真的可能,如果可以,我是否需要更改方法?