升级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
相关产品推荐
相关产品推荐

