Я пишу фреймворк, который использует 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) и указанием параметров в моем файле testNG.xml в тегах <test>
и установкой параллелизма в «тесты», например: -
<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 для каждого работающего потока.У меня вопрос - возможно ли это на самом деле, и если да, нужно ли мне менять подход?