You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:05:55