Я не знаю, как распараллелить мой тест в огурце с @cucumberOption - PullRequest
0 голосов
/ 16 мая 2019

У меня есть эта конфигурация:

@RunWith(Cucumber.class)
@CucumberOptions(
         features = "src/test/resources/features",
         glue = "com.cucumberTest.stepDefinitions",
         monochrome=true,
         plugin = {
                 "html:target/cucumber-html-report",
                 "json:target/cucumber.json",
                 "pretty:target/cucumber-pretty.txt",
                 "usage:target/cucumber-usage.json",
                 "junit:target/cucumber-results.xml"
                    }

)

, и я пытаюсь преобразовать в это:

Main.main(new String[]{"--threads", "4",
                "-p","timeline:target/cucumber-parallel-report",
               "-p","json:target/prueba/cucumber.json",
                "-p","junit:target/cucumber-results.xml",
                "-p","pretty:target/cucumber-pretty.txt",
               "-p","html:target/cucumber-html-report",
                "-g", "com.cucumberTest.stepDefinitions", "src/test/resources/features/"});

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

:

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
                <configuration>
                    <testFailureIgnore>true</testFailureIgnore>
                    <parallel>both</parallel>
                    <threadCount>15</threadCount>
                </configuration>
 </plugin>

Могу ли я получить его?

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

Ключевой момент: Прежде чем мы начнем, мы хотели бы поделиться примечанием для лучшего понимания в будущем, мы не будем смешивать прямые и переходные зависимости, особенно их версии!Это может привести к непредсказуемому исходу.Хорошо, давайте разберемся шаг за шагом.

Первый - Обновите POM.xml, указав правильный набор зависимостей io.cucumber.Мы рассматриваем v4.2.6 для этой реализации

 <dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit</artifactId>
    <version>4.2.6</version>
</dependency>

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-picocontainer</artifactId>
    <version>4.2.6</version>
</dependency>

Указать на заметку - Может быть проблема, когда все в порядке, но тесты по-прежнему не выполняются параллельно, и это может произойти, есливаш pom.xml имеет прямую / транзитивную зависимость testng.Поскольку testNG заставляет Surefire игнорировать класс-оболочку JUnit.Если у вас была зависимость testng, удалите зависимость TestNG, или вы можете взять вызов 2, определите 2 выполнения - для TestNG и JUnit и отключите один в соответствии с вашими потребностями.

Второй - Настройка Runnerкласс в соответствии с вашей структурой необходимо

package com.jacksparrow.automation.suite.runner;

import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(features = "classpath:features/functional/",
                     glue = {"com.jacksparrow.automation.steps_definitions.functional" },
                   plugin = { "pretty","json:target/cucumber-json/cucumber.json",
                            "junit:target/cucumber-reports/Cucumber.xml", "html:target/cucumber-reports"},
                   tags = { "@BAMS_Submitted_State_Guest_User" },
                   junit ={ "--step-notifications"},
                   strict = false,
                   dryRun = false,
               monochrome = true)

public class RunCukeTest {
}

Третий - Реализация плагина maven surefire, который будет фактически запускать тесты параллельно

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M3</version>
    <configuration>
        <parallel>methods</parallel>
        <threadCount>2</threadCount>
        <reuserForks>false</reuserForks>
        <testFailureIgnore>true</testFailureIgnore>
        <includes>
            <include>**/*RunCukeTest.java</include>
        </includes>
    </configuration>
</plugin>

Четвертый - Реализация Hooks.java

import cucumber.api.Scenario;
import cucumber.api.java.Before;
import cucumber.api.java.After;

public class Hooks {

    @Before
    public void setUpScenario(String browser){
        //BaseSteps.getInstance().getBrowserInstantiation(browser); your browser setup method
    }
    @After
    public void afterScenario(Scenario scenario){
    // more code goes here  
    }
   }
0 голосов
/ 17 мая 2019

Какую версию cucumber-java вы используете? если это огурец 4, то вы можете использовать threads = "2" (более 1 потока) для параллельного выполнения сценариев.

...