如何使用Cucumber对多个浏览器执行并行执行

我目前正在研究Cucumber + MVN + TestNG + Selenium框架。我在.properties文件中定义了一个变量“浏览器”,并且能够在黄瓜步骤中正确访问此变量。但是现在我要从TestNG xml发送浏览器参数,并且对于顺序测试运行,它运行得很好。但是,当我尝试与多个浏览器并行运行时,它仅执行一个测试,它将并行执行firefox或chrome测试。

我的testNG xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite" data-provider-thread-count="4" parallel="tests">
<test name="TestChrome">
<parameter name="browser" value="chrome"></parameter>
<classes>
        <class name="runners.RunnerTest" />
    </classes>
</test>
<test name="TestFirefox">
    <parameter name="browser" value="firefox"></parameter>
    <classes>
        <class name="runners.RunnerTest" />
    </classes>
</test>
</suite>

我的Configuration.properties如下所示,我正尝试使用TestNG参数覆盖

environment=st
browser = chrome

我的WebDriverManager类

public class WebDriverManager {

public WebDriver driver;
public WebDriver driverCommon;
private static DriverType driverType;
private static EnvironmentType environmentType;


public WebDriverManager() {
    driverType = FileReaderManager.getInstance().getconfigReader().getBrowser();
    environmentType = FileReaderManager.getInstance().getconfigReader().getEnvironment();

}

public WebDriver getDriver() {
    if (driver == null)
        driver = createDriver();
    return driver;

}

public WebDriver quitDriver() {
    if (driver != null)
        driver = closeDriver();
    return driver;
}

private WebDriver createDriver() {

    switch (environmentType) {

    case ST:
        driver = createSTDriver();
        break;
    case DEV:
        driver = createDEVDriver();
        break;
    case UAT:
        driver = createUATDriver();
        break;
    case PROD:
        driver = createPRODDriver();

    }
    return driver;
}

private WebDriver createSTDriver() {

    // Find out the OS whether it is mac or windows
    String os = System.getProperty("os.name").toLowerCase();
    String onlineURL = OnlineURLEnum.ONLInesT.toString();

    if (os.contains("mac")) {

        switch (driverType) {
        case FIREFOX:
            FirefoxOptions firefoxOptions = new FirefoxOptions();
            firefoxOptions.setacceptInsecureCerts(true);
            firefoxOptions.setHeadless(true);

            System.setProperty("webdriver.gecko.driver","/Users/test/Drivers/geckodriver");
            driver = new FirefoxDriver();

            driver.manage().window().maximize();
            driver.navigate().to(onlineURL);

            System.out.println("Navigate to Firefox browser");
            break;

        case CHROME:

            System.setProperty("webdriver.chrome.driver","/Users/test/Drivers/chromedriver");
            driver = new ChromeDriver();

            driver.manage().window().maximize();
            driver.navigate().to(onlineURL);

            System.out.println("Navigate to Chrome browser");

            break;

        case SAFARI:

            driver = new SafariDriver();

            driver.manage().window().maximize();
            driver.navigate().to(onlineURL);

            System.out.println("Navigate to Safari browser");

            break;
        }
    }

我的跑步者班

@CucumberOptions(strict = true,features = "src/test/resources/features",glue = { "stepDefinitions" },tags = {
    "@DEVCON001.0" },plugin = { "pretty","html:target/cucumber-reports/cucumber-pretty","json:target/cucumber-reports/CucumberTestReport.json","rerun:target/cucumber-reports/rerun.txt","json:target/cucumber-reports/CucumberTestReport.json" },monochrome = true)

public class RunnerTest {
private TestNGCucumberRunner testNGCucumberRunner;
private String browser;

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

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

@Parameters({"browser"})
@BeforeTest
public void beforeSuite(String browser) throws ConfigurationException,IOException {
     browser = Reporter.getcurrentTestResult().gettestcontext().getcurrentXmlTest().getParameter("browser");

    ConfigFileWriter configFileWriter;
    configFileWriter = new ConfigFileWriter(browser);
    System.out.println("Browser for the tests: " + browser);
    this.browser = browser;

}

@Test(dataProvider = "features")
public <CucumberFeatureWrapper> void feature(PickleWrapper eventwrapper,CucumberFeatureWrapper cucumberFeature)
        throws Throwable {

    testNGCucumberRunner.runScenario(eventwrapper.getPickle());
}

@DataProvider(parallel = true)
public Object[][] features() {

    return testNGCucumberRunner.provideScenarios();
}

@AfterClass(alwaysRun = true)
public void tearDownClass() throws Exception {
    testNGCucumberRunner.finish();
}
zhutian87897998 回答:如何使用Cucumber对多个浏览器执行并行执行

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2621584.html

大家都在问