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

升级Cucumber 4至Cucumber 6后测试重复执行问题求助

解决Cucumber 6升级后同一Feature重复执行的问题

问题根源

你命令里指定了classpath:sec/test/java/runner/,这会让Cucumber加载目录下所有的runner类——两个runner会各自独立执行测试逻辑。只要某个feature匹配Run123标签,就会被两个runner分别扫描执行一次,直接导致重复。另外Cucumber 6里cucumber.options参数会和runner类本身的@CucumberOptions配置叠加,进一步加重重复执行的情况。

解决办法

1. 直接指定单个runner类执行

别用runner目录,直接指定具体的runner类,避免同时触发两个runner:

mvn test -DEnv=qa -Dtest=你的具体Runner类名 -Dcucumber.filter.tags="Run123"

或者不用指定runner,直接用Cucumber 6的细分参数指定feature和glue路径:

mvn test -DEnv=qa -Dcucumber.features="classpath:你的feature文件所在路径" -Dcucumber.glue="你的步骤定义包路径" -Dcucumber.filter.tags="Run123"

2. 给不同runner划分明确的执行范围

如果必须保留两个runner,就给它们的@CucumberOptions设置不重叠的扫描规则,比如:

  • 第一个runner只处理@Run123标签的feature
  • 第二个runner处理其他标签的feature

修改runner类代码:

@CucumberOptions(
    features = "classpath:features/",
    glue = "com.your.stepdefs.package",
    tags = "@Run123"
)
public class Run123Runner { }
@CucumberOptions(
    features = "classpath:features/",
    glue = "com.your.stepdefs.package",
    tags = "not @Run123"
)
public class OtherRunner { }

这样执行时指定单个runner,就不会重复跑同一个feature。

3. 检查Maven Surefire插件配置

如果上面的方法都没用,去pom.xml里看看surefire插件是不是配置了扫描多个runner类。可以通过includes指定只扫描需要的runner:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M7</version>
    <configuration>
        <includes>
            <include>**/Run123Runner.java</include>
        </includes>
    </configuration>
</plugin>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:05:03