如何让Cucumber.io测试场景按顺序而非并行执行?
解决Cucumber+Appium批量测试时并行执行导致的会话创建错误问题
1. 强制禁用Cucumber并行执行
这是最直接的解决方式,确保所有场景串行执行:
- 在项目配置文件(如
cucumber.properties或junit-platform.properties)中添加配置:cucumber.execution.parallel.enabled=false - 如果使用JUnit注解配置测试类,在
@CucumberOptions中明确关闭并行:@CucumberOptions( features = "src/test/resources/features", glue = "com.yourpackage.stepdefs", parallel = false // 禁用并行 ) public class RunCucumberTests {} - 终端执行时,直接追加禁用并行的参数,完整命令如下:
mvn test -Dcucumber.options="--tags @TagToRun" -Dcucumber.execution.parallel.enabled=false
2. 修正驱动与服务的生命周期管理
确保Appium驱动和服务的创建/销毁逻辑不会因并行冲突:
- 避免使用静态变量存储Appium驱动实例,改为每个测试类/场景独立持有驱动,防止多个场景共享同一驱动导致资源冲突
- 将Appium服务的启动放在
@BeforeClass(JUnit 4)或@BeforeAll(JUnit 5),销毁放在@AfterClass或@AfterAll,确保服务仅在所有场景执行完毕后关闭,而非中途被某个特性文件的@AfterClass提前销毁
3. 固定测试执行顺序(可选)
如果需要按特定顺序执行特性文件,可配置Cucumber按定义顺序执行:
- 在配置文件中添加:
该配置会按照特性文件在项目中的定义顺序执行场景,配合禁用并行,彻底避免随机并行的问题cucumber.execution.order=defined
内容的提问来源于stack exchange,提问作者Youssef Ehab
相关产品推荐
相关产品推荐

