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

使用cucumber-junit-platform-engine+Selenium测试时线程过多如何解决

问题根因
  • Cucumber 6.10.4版本默认采用EAGER测试发现模式,会在测试启动时一次性初始化所有场景实例,触发@Before钩子初始化driver,而非等待线程调度后再初始化对应场景的资源
  • JUnit Jupiter的@BeforeEach注解对Cucumber场景生命周期不生效,Cucumber只能识别io.cucumber.java包下的钩子注解,所以你替换注解的操作不会有效果
解决步骤
  1. 新增junit-platform配置项,开启懒加载发现模式,仅在线程调度到对应场景时才初始化场景实例,触发钩子创建driver:
    在你的junit-platform.properties文件中追加以下配置:
cucumber.junit.platform.execution.discovery-mode=lazy
cucumber.execution.parallel.mode=same_thread
  1. 调整ScenarioContext和WebDriver的Bean作用域,保证每个场景/线程对应独立的实例,避免资源冲突:
    给ScenarioContext类添加@Scope("cucumber-glue")注解,WebDriver实例的创建逻辑绑定到当前场景的生命周期,不要设置为全局单例。
  2. 验证执行效果:修改完成后重新运行测试,同时存活的driver实例(浏览器窗口)数量最多等于你配置的parallelism=4,每个场景执行结束调用driver.quit()释放资源后,下一个待执行场景才会初始化新的driver。

内容的提问来源于stack exchange,提问作者Madalina P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:18:02