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

SpringBoot+Cucumber测试运行器不执行用例无报错问题咨询

SpringBoot+Cucumber测试运行器无执行无报错问题排查方案

核心问题点

当前问题由多个配置错误共同导致,按影响优先级排序:

  • 测试代码、特征文件存放路径不符合Maven标准目录规范,构建阶段根本不会被扫描执行
  • SpringBoot 2.5.6默认集成JUnit 5,当前使用的cucumber-junit是JUnit4体系的运行器,缺少兼容依赖导致运行器静默失效
  • POM缺少Maven测试插件配置,未指定Cucumber运行器的扫描规则
  • (次要)部分依赖版本存在兼容风险,运行器glue路径配置不完整

分步修复方案

1. 调整项目目录结构(必改)

Maven构建时默认仅扫描src/test目录下的测试代码与测试资源,你当前把stepdefs、runner、feature全放在src/main下,测试阶段不会加载这部分内容。调整后的标准结构如下:

src
├── main
│   ├── java/com/xx/xx/automation  # 仅存放业务代码、页面对象、工具类、Spring配置类
│   └── resources  # 存放业务配置,如application.yml、静态资源
└── test
    ├── java
    │   └── com/xx/xx/automation
    │       ├── runners  # 所有Cucumber测试运行器移到此处
    │       └── stepdefs # 步骤定义、Hooks钩子类移到此处
    └── resources
        └── features # 所有.feature特征文件移到此处

调整后在IDE中重新标记目录属性:将src/test/java标记为Test Sources Root,src/test/resources标记为Test Resources Root,避免IDE识别失败。

2. 修正pom.xml配置

2.1 补全JUnit4兼容依赖

SpringBoot 2.5.6的spring-boot-starter-test默认仅引入JUnit 5(Jupiter)依赖,缺少JUnit4的兼容引擎,Cucumber JUnit4运行器无法被识别加载,在dependencies节点中添加:

<!-- JUnit4兼容引擎,支撑cucumber-junit运行器 -->
<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <scope>test</scope>
</dependency>

2.2 升级存在兼容风险的依赖版本

你当前使用的lombok 1.18.2版本过旧,对JDK8、SpringBoot 2.5.x的兼容存在已知问题,将properties节点中的lombok版本修改为:

<lombok.version>1.18.22</lombok.version>

2.3 补全Maven测试插件配置

你当前仅配置了SpringBoot打包插件,缺少测试执行插件的扫描规则,在build->plugins节点下添加maven-surefire-plugin配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.2</version>
    <configuration>
        <includes>
            <!-- 指定扫描所有以Runner结尾的测试运行器 -->
            <include>**/runners/*Runner.java</include>
        </includes>
    </configuration>
</plugin>

3. 修正测试运行器配置

  1. 确认glue配置的包路径和你实际的stepdefs包路径完全匹配,注意包名层级不要多写/少写(你当前写的路径有3层xx,需和实际包名对齐)
  2. 如果使用cucumber-spring做依赖注入,需要把Spring配置类所在的包也加入glue扫描路径
  3. Cucumber 4.7.0中strict=true为默认配置,无需显式声明避免版本兼容问题
    修正后的运行器示例代码:
import org.junit.runner.RunWith;       
import io.cucumber.junit.Cucumber;         
import io.cucumber.junit.CucumberOptions;

@RunWith(Cucumber.class)        
@CucumberOptions(          
        features = "classpath:features",    
        // 第二个路径替换为你自己的Spring Config配置类所在包
        glue = {"com.xx.xx.automation.stepdefs", "com.xx.xx.automation.config"},        
        tags = "@SanityTest",        
        plugin = {"pretty","html:target/cucumber.html","junit:target/cucumber.xml"},    
        monochrome = true,     
        dryRun = false
)
public class Srt3AppRunner {
}

验证方法

  1. 先执行mvn clean compile test-compile确认代码无编译错误
  2. 执行mvn test看控制台是否输出Cucumber特征文件扫描、步骤匹配的日志
  3. 如果直接在IDE中运行运行器类,确认运行的是src/test/java下的新类,不要运行之前main目录下的旧类
  4. 若仍提示步骤未定义,开启dryRun = true运行一次,控制台会输出所有未匹配的步骤信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:21:24