Создайте класс бегуна TestNG для каждого работающего потока, используя Cucumber - PullRequest
0 голосов
/ 14 ноября 2018

Я пишу фреймворк, который использует 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 все тесты из каждого запущенного потока помещаются в один и тот же отчет - см. пример ниже.

Extent Report

Насколько я понимаю, ExtentProperties.INSTANCE является общим для каждого из запущенных потоков, поэтому путь к файлу всегда переопределяется.

То, что я хотел бы, это индивидуальный отчет для каждого работающего потока, который приводит к отчету для каждого подключенного мобильного устройства.

Предположительно, мне нужно создать отдельный экземпляр класса TestNGRunner для каждого работающего потока.У меня вопрос - возможно ли это на самом деле, и если да, нужно ли мне менять подход?

...