Как я могу написать настраиваемый TestNGCucumberRunner с последней версией ввода-вывода.cucumber.cucumber-testng версии 4.2.6

#cucumber-jvm

#cucumber-jvm

Вопрос:

Я пытаюсь написать пользовательский TestNGCucumberRunner (для последней версии cucumber 4.2.6), где я могу фильтровать список функций cucumberfeatures на основе аргументов времени выполнения в методе getFeatures().

Все онлайн-примеры объясняются с помощью info.cukes версии 1.2.5, где все зависимые классы и методы были общедоступными

Я никогда раньше не писал testrunner. Может ли кто-нибудь помочь, пожалуйста?

Ответ №1:

Первое обновление POM.xml с правильным набором зависимостей io.cucumber в соответствии с версией 4.2.6

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

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

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

Второй — Настройте класс TestNGRunner в соответствии с вашими потребностями в фреймворке

 package com.jacksparrow.automation.suite.runner;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import com.jacksparrow.automation.steps_definitions.functional.BaseSteps;
import cucumber.api.CucumberOptions;
import cucumber.api.testng.AbstractTestNGCucumberTests;

@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 extends Hooks {

} 
  

Третий — Реализовать Hooks.java

 import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import cucumber.api.testng.AbstractTestNGCucumberTests;

public class Hooks extends AbstractTestNGCucumberTests {

    @Parameters({ "browser" })
    @BeforeTest
    public void setUpScenario(String browser){
        BaseSteps.getInstance().getBrowserInstantiation(browser);
    }
}
  

Примечание — я не реализовал этот способ. Но, насколько мне известно, это может сработать. Пожалуйста, проверьте и поделитесь своим опытом.

Четвертое обновление TestNG.xml в /src/test /resources / в соответствии с вашим классом TestNGRunner и потребностями фреймворка.

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">

    <test thread-count="1" name="Test" parallel="tests">
        <parameter name="browser" value="chrome" />
        <classes>
            <class
                name="com.jacksparrow.automation.suite.runner.RunCukeTest" />
        </classes>
    </test>
</suite>
  

Пятое — Вы должны быть готовы к запуску automation Suite с помощью TestNG любым из следующих способов

  -    Run TestNG.xml directly from IDE 
 -    From CMD - mvn test -Dsurefire.suiteXmlFiles=src/test/resources/testng.xml
 -    From POM.xml - Using Surefire Plugin

<profiles>
   <profile>
      <id>selenium-tests</id>
      <build>
         <plugins>
            <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-surefire-plugin</artifactId>
               <version>3.0.0-M3</version>
               <configuration>
                  <suiteXmlFiles>
                     <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
                  </suiteXmlFiles>
               </configuration>
            </plugin>     
         </plugins>
      </build>
   </profile>
</profiles>