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

如何基于JUnit5实现Cucumber测试场景并行执行?

解决Cucumber + JUnit5 测试场景并行执行问题

核心问题分析

你当前的配置仅启用了JUnit Jupiter层面的并行,但Cucumber JUnit Platform Engine需要单独开启自身的并行执行配置,且默认并行粒度是feature文件而非单个scenario,这导致单个feature内的场景无法并行运行。

解决方案步骤

1. 修正Cucumber并行配置(更新junit-platform.properties)

在src/test/resources/junit-platform.properties中添加Cucumber专属的并行参数,确保场景级并行:

# JUnit Jupiter 基础并行配置(保留)
junit.jupiter.execution.parallel.enabled = true
junit.jupiter.execution.parallel.mode.default = concurrent

# Cucumber 并行核心配置
cucumber.execution.parallel.enabled=true
# 设置并行粒度为单个场景(默认是feature文件)
cucumber.execution.parallel.mode=scenario
# 固定并行线程数
cucumber.execution.parallel.config.strategy=fixed
cucumber.execution.parallel.config.fixed.parallelism=4

2. 配置Maven Surefire Plugin

确保Surefire插件正确支持并行执行,避免线程共享问题:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.2.5</version>
    <configuration>
        <!-- 配置进程数,建议和并行线程数匹配或设为CPU核心数 -->
        <forkCount>4</forkCount>
        <!-- 禁用进程复用,防止跨测试状态污染 -->
        <reuseForks>false</reuseForks>
        <!-- 显式传递并行配置参数(可选,确保配置生效) -->
        <properties>
            <configurationParameters>
                cucumber.execution.parallel.enabled=true
                cucumber.execution.parallel.mode=scenario
                cucumber.execution.parallel.config.fixed.parallelism=4
            </configurationParameters>
        </properties>
    </configuration>
</plugin>

3. 确保Step Definitions线程安全(关键!)

由于使用Selenium,必须保证每个测试线程拥有独立的WebDriver实例,避免线程冲突。使用ThreadLocal存储WebDriver:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import io.cucumber.java.After;
import io.cucumber.java.Before;

public class StepDef {
    private static final ThreadLocal<WebDriver> driverHolder = new ThreadLocal<>();

    @Before
    public void setup() {
        if (driverHolder.get() == null) {
            WebDriver driver = new ChromeDriver();
            driverHolder.set(driver);
        }
    }

    @After
    public void teardown() {
        WebDriver driver = driverHolder.get();
        if (driver != null) {
            driver.quit();
            driverHolder.remove();
        }
    }

    // 所有步骤方法中通过 driverHolder.get() 获取WebDriver实例
}

验证执行

运行Maven命令执行测试:

mvn clean test

此时单个feature文件内的多个场景会并行执行,多个feature文件也会同时运行。

内容的提问来源于stack exchange,提问作者Akshay Kachare

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:24:52