Параллельные тесты TestNG + Cucumber выполняются на одном и том же экземпляре Chrome - PullRequest
0 голосов
/ 02 января 2019

Всякий раз, когда мы запускаем наш набор тестов параллельно как «тесты» с файлом TestNG xml, он открывает оба экземпляра драйвера chrome, но в то же время выполняет обе функции огурца в одном и том же окне chrome.

ДаетВот некоторые результаты, подобные этому: Два раза выполняет поиск в строке поиска

Это зависимости Maven:

<dependency>
    <groupId>info.cukes</groupId>
    <artifactId>cucumber-java</artifactId>
    <version>1.2.5</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>info.cukes</groupId>
    <artifactId>cucumber-jvm-deps</artifactId>
    <version>1.0.5</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>info.cukes</groupId>
    <artifactId>cucumber-testng</artifactId>
    <version>1.2.5</version>
    <scope>compile</scope>
    <exclusions>
        <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Мы используем тестовый прогон для каждого теста.Все участники тестирования в основном одинаковы.Вот используемый тестовый прогон:

package bdxReport.biAdsDashboard.AdvertisingPerformance.Content;

import cucumber.api.CucumberOptions;
import org.testng.annotations.Test;

@CucumberOptions(
        features = "src/test/resources/FeaturesAdsDashboard/FeaturesAdvertisingPerformance/Content/CheckContentAdvertisingByProduct.feature",
        glue = {"stepDefinitions"},

        format = {
                "pretty",
                "html:target/cucumber-reports/AdsDashboard/TestRunnerCheckContentAdvertisingByProduct-Reports",
                "json:target/cucumber-reports/AdsDashboard/TestRunnerCheckContentAdvertisingByProductReport.json",
                "rerun:target/cucumber-reports/AdsDashboard/TestRunnerCheckContentAdvertisingByProduct-Reports/rerun.txt"
        })
@Test
public class TestRunnerCheckContentAdvertisingByProduct {
    private TestNGCucumberRunner testNGCucumberRunner;

    @BeforeClass(alwaysRun = true)
    public void setUpClass() throws Exception {

        testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
    }

    @Test(groups = "cucumber", description = "Runs Cucumber Feature", dataProvider = "features")
    public void feature(CucumberFeatureWrapper cucumberFeature) {
        testNGCucumberRunner.runCucumber(cucumberFeature.getCucumberFeature());
    }

    @DataProvider
    public Object[][] features() {
        return testNGCucumberRunner.provideFeatures();
    }

    @AfterClass(alwaysRun = true)
    public void tearDownClass() throws Exception {
        testNGCucumberRunner.finish();
    }
}

И это комплект xml TestNG:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="BDX Executive Summary Advertising Performance" parallel="tests" thread-count="20" preserve-order="true">
    <listeners>
        <listener class-name="common.testcases.TestCaseListener" />
        <listener class-name="common.testcases.CaptureScreenshotOnFailureListenerBDX"/>
    </listeners>
    <test name="01: Check Advertising Performance Section Data">
        <classes>
            <class name="bdxReport.biExecutiveSummary.AdvertisingPerformance.Data.TestRunnerAdvertisingSectionData" />
        </classes>
    </test>
    <test name="02: Check Advertising Performance Section Content">
        <classes>
            <class name="bdxReport.biExecutiveSummary.AdvertisingPerformance.Content.TestRunnerAdvertisingSectionContent" />
        </classes>
    </test>
</suite>

Мы провели много исследований о причинах такого поведения, но до сих пормы не смогли определить причины этого поведения

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Чтобы максимально использовать возможности TestNG, вы должны использовать каркас Testng QAF .Он поддерживает множественный синтаксис bdd , включая gherkin, используя GherkinFactory .

QAF рассматривает каждый сценарий как тест TestNG, а схему сценария - как тест данных, управляемый данными TestNG.Поскольку qaf обеспечивает встроенное управление драйверами и ресурсами, вам не нужно писать ни одной строки кода для управления драйверами или ресурсами.Все, что вам нужно сделать, это создать XML-файл конфигурации TestNG в соответствии с вашим требованием либо для запуска параллельных методов (сценариев), либо для групп, либо для тестирования XML в одном или нескольких браузерах.

Ниже приведен пример параллельного запуска сценариев.

<test name="Gherkin-QAF-Test" parallel="methods">
   <parameter name="step.provider.pkg" value="com.qmetry.qaf.automation.impl.step.qaf" />
   <parameter name="scenario.file.loc" value="resources/features" />
   <classes>
      <class name="com.qmetry.qaf.automation.step.client.gherkin.GherkinScenarioFactory" />
   </classes>
</test>

Он допускает различные возможные комбинации конфигурации .Вот еще один пример, где он будет запускать сценарии в двух браузерах и параллельно.Вы можете настроить количество потоков для каждого браузера в качестве стандартной конфигурации TestNG xml.

<suite name="AUT Test Automation" verbose="0"  parallel="tests">
<test name="Test-on-chrome" parallel="methods">
   <parameter name="step.provider.pkg" value="com.qmetry.qaf.automation.impl.step.qaf" />
   <parameter name="scenario.file.loc" value="resources/features" />
   <parameter name="driver.name" value="chromeDriver" />           
   <classes>
      <class name="com.qmetry.qaf.automation.step.client.gherkin.GherkinScenarioFactory" />
   </classes>
</test>

<test name="Test FF" parallel="methods">
   <parameter name="step.provider.pkg" value="com.qmetry.qaf.automation.impl.step.qaf" />
   <parameter name="scenario.file.loc" value="resources/features" />
   <parameter name="driver.name" value="firefoxDriver" />           
   <classes>
      <class name="com.qmetry.qaf.automation.step.client.gherkin.GherkinScenarioFactory" />
   </classes>
</test>
</suite>
0 голосов
/ 03 января 2019

Создание отдельного файла бегунка для каждой функции не имеет смысла для меня. Вы пробовали "cucumber-jvm-parallel-plugin" для запуска функций. Пожалуйста, проверьте следующий ответ: Как выполнить параллельный файл функций огурца

Кроме того, согласно моему опыту, это проблема с драйвером, который вы создаете, либо он статичен, либо не управляется должным образом. Во-первых, попробуйте ссылку выше, а пока позвольте мне реализовать параллельное выполнение в новой среде автоматизации, и я вставлю код здесь

...