Cucumber JUnit并行执行失效问题求助
Cucumber JUnit并行执行失效问题
问题现象
我已在pom.xml的maven-surefire-plugin配置中添加parallel与threadCount参数,配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.3</version> <configuration> <parallel>all</parallel> <threadCount>2</threadCount> <argLine>-Xmx4g</argLine> <!-- <useUnlimitedThreads>true</useUnlimitedThreads> --> <systemPropertyVariables> <databaseSchema>MY_TEST_SCHEMA_${surefire.forkNumber}</databaseSchema> <allure.results.directory>${project.build.directory}/allure-results</allure.results.directory> </systemPropertyVariables> <includes> <include>**/Test*.java</include> <include>**/*Test.java</include> <include>**/*Tests.java</include> <include>**/*TestCase.java</include> </includes> </configuration> </plugin>
执行Maven测试时,控制台显示Running parallel.Test_RunCucumber,且多个浏览器实例被启动,但仅单个实例执行测试,其余实例为空。
我的测试用例示例如下:
Feature: Scenario Outlines feature file Scenario Outline: <site> # Given Step from '<scen_out_row_num>' in 'scenario-outlines' feature file Given the user navigates to home page '<site>' Examples: | site | | https://google.com/ | | https://nationalpost.com/ | | https://ottawacitizen.com/ |
我尝试过改用failsafe插件,但无任何改善;也参照了Cucumber官方并行执行示例,但输出显示所有测试仍运行在同一线程:
@@@ Thread ID - 1 - Scenario Outline Row 1 from scenario-outlines feature file. @@@ Thread ID - 1 - Scenario Outline Row 2 from scenario-outlines feature file. @@@ Thread ID - 1 - Scenario 1 from scenarios feature file. @@@ Thread ID - 1 - Scenario 2 from scenarios feature file.
可复现完整代码
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <selenium.version>4.16.1</selenium.version> <cucumber.version>7.15.0</cucumber.version> </properties> <groupId>postmedia-automated-testing</groupId> <artifactId>postmedia-automated-testing</artifactId> <version>1.0-SNAPSHOT</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.10.1</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.3</version> <configuration> <parallel>all</parallel> <threadCount>4</threadCount> <includes> <include>**/Test*.java</include> </includes> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-api</artifactId> <version>${selenium.version}</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-chrome-driver</artifactId> <version>${selenium.version}</version> </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-java</artifactId> <version>${cucumber.version}</version> </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-core</artifactId> <version>${cucumber.version}</version> </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-junit</artifactId> <version>${cucumber.version}</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.10.1</version> </dependency> </dependencies> </project>
src/test/resources/features/feature_1.feature
Feature: Navigate to https://google.com Scenario: Verify navigation to https://google.com Given the user navigates to home page "https://google.com"
src/test/resources/features/feature_2.feature
Feature: Navigate to https://microsoft.com Scenario: Verify navigation to https://microsoft.com Given the user navigates to home page "https://microsoft.com"
src/test/java/steps/StepDefs.java
package steps; import io.cucumber.java.After; import io.cucumber.java.Before; import io.cucumber.java.en.Given; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class StepDefs { private WebDriver driver; @Before() public void launchBrowser() { driver = new ChromeDriver(); } @After() public void quitDriver() { driver.quit(); } @Given("the user navigates to home page {string}") public void navigateToHomePage(String url) throws InterruptedException { driver.navigate().to(url); System.out.println("@@@ navigated to site: " + url); Thread.sleep(5000); } }
src/test/java/steps/Test_RunCucumber.java
package steps; import io.cucumber.java.After; import io.cucumber.java.Before; import io.cucumber.java.en.Given; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class StepDefs { private WebDriver driver; @Before() public void launchBrowser() { driver = new ChromeDriver(); } @After() public void quitDriver() { driver.quit(); } @Given("the user navigates to home page {string}") public void navigateToHomePage(String url) throws InterruptedException { driver.navigate().to(url); System.out.println("@@@ navigated to site: " + url); Thread.sleep(5000); } }
恳请帮忙解决Cucumber JUnit并行执行失效的问题。
内容的提问来源于stack exchange,提问作者JustCallMeDan
相关产品推荐
相关产品推荐

