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

Cucumber CLI调用Main执行测试跳过feature文件问题咨询

问题根因

你的CLI传参存在两处核心错误,是导致测试无法正常执行的直接原因:

  • -g/--glue参数传值错误:该参数要求传入步骤定义类所在的Java包全限定名,不支持传入文件系统路径,这是你两次运行异常的核心诱因。
  • 标签参数传值不规范:-t/--tags参数匹配标签时,需要传入带@前缀的完整标签名,漏写前缀会直接导致场景匹配失败。

两次异常的对应解释

  1. 带标签运行返回0场景:因为glue传入的是文件路径,Cucumber无法在类路径下扫描到任何步骤定义类,同时标签值漏写@前缀,双重问题下没有任何符合匹配规则的场景被加载,最终返回0场景0步骤的结果。
  2. 移除标签后提示步骤缺失、指定单个feature仍提示步骤未定义:本质还是glue参数传了文件路径,Cucumber按照包名规则去类路径下扫描时,根本找不到对应位置的步骤定义类,自然无法匹配到feature里的任何步骤,所有步骤都会被标记为undefined。
正确传参示例

假设你的步骤定义类源码放在src/test/java/com/company/project/stepdefinitions目录下,对应包名为com.company.project.stepdefinitions,正确的Runner代码如下:

import io.cucumber.core.cli.Main;

public class Runner {
    public static void main(String[] args) {
        Main.main(new String[]{
                "-g", "com.company.project.stepdefinitions", // 传包名,不要传文件路径
                "-t", "@Regression", // 标签必须带@前缀
                "src/test/resources/features" // feature文件路径支持传文件系统相对路径
        });
    }
}
运行前校验项
  • 运行前先完成项目测试代码编译,确保target/test-classes目录下存在对应步骤定义的class文件,否则Cucumber扫描类路径时无法加载到步骤定义。
  • 如果用IDE运行,先把src/test/java目录标记为Test Sources Root,保证IDE运行时会把该目录下的类加入运行时类路径。
  • 如果步骤定义分在多个子包下,只需要传入最上层的公共包名即可,Cucumber会递归扫描该包下所有类中的步骤定义方法,不需要单独指定单个步骤类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:51:17