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生成报告时,来自每个运行线程的所有测试都放在同一个报告中——参见下面的示例
我的理解是ExtentProperties.INSTANCE
在每个运行的线程之间共享,因此文件路径总是被覆盖
我想要的是每个正在运行的线程的独立报告,这将导致每个连接的移动设备的报告
大概我需要做的是为每个正在运行的线程创建一个单独的TestNGRunner类实例。我的问题是——这真的可能吗?如果可能,我需要改变我的方法吗
共 (0) 个答案