Maven项目Cucumber测试执行结果始终为0的排查求助
排查Cucumber测试执行0用例问题
执行命令mvn test -Dcucumberoptions="--tags @Smoke"时,测试始终显示0用例执行,结合你提供的配置文件,排查方向如下:
1. 命令行参数格式错误
Cucumber的系统属性参数名是**cucumber.options**(注意中间的英文点),你使用的cucumberoptions格式错误,导致命令行的标签过滤参数完全不生效。即使参数修正后,也要确认feature文件确实包含@Smoke标签。
修正命令:
mvn test -Dcucumber.options="--tags @Smoke"
2. Feature文件存放路径不符合Maven规范
你的TestRunner中指定features = "src/test/java/features",但Maven默认只会编译src/test/java下的.java文件,不会将该目录下的.feature文件复制到测试类路径中,直接导致Cucumber找不到测试用例文件。
修正方案:
- 将所有
.feature文件移动到src/test/resources/features目录下 - 同步修改TestRunner中的路径配置:
@CucumberOptions( features = "src/test/resources/features", glue = {"Steps"} )
3. JUnit依赖冲突导致测试类未被识别
你的pom.xml中同时引入了JUnit 4和JUnit 5两套依赖:
- JUnit 4:
junit:junit:4.13.2、io.cucumber:cucumber-junit:7.5.0 - JUnit 5:
org.junit.jupiter:junit-jupiter-api等多个依赖
而TestRunner使用的是JUnit 4的@RunWith(Cucumber.class)注解,maven-surefire-plugin 2.22.2版本对JUnit 5兼容性有限,两套依赖共存会导致测试类无法被正确扫描执行。
修正方案:
- 移除所有JUnit 5相关依赖:
<!-- 删除以下依赖 --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.9.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.9.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.9.0</version> <scope>test</scope> </dependency>
- 替换Allure依赖为JUnit 4适配版本:
<dependency> <groupId>io.qameta.allure</groupId> <artifactId>allure-junit4</artifactId> <version>2.13.6</version> </dependency>
4. 步骤定义包路径验证
确认Steps包确实存在,且所有步骤定义类都位于该包下;类上不要添加JUnit的@Test注解(会干扰Cucumber扫描逻辑);步骤方法的@When、@Then注解要与feature文件中的语句完全匹配。
补充验证步骤
- 先不使用命令行标签过滤,直接执行
mvn test,验证是否能找到并执行feature文件中的用例 - 检查
target/test-classes目录下是否存在.feature文件,确认Maven是否正确复制了测试资源
内容的提问来源于stack exchange,提问作者CvMr
相关产品推荐
相关产品推荐

