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

单次测试执行触发两个BrowserStack会话问题求助

问题原因与解决方案

原因分析

出现两个BrowserStack会话的核心原因是会话初始化逻辑被绑定到了Feature级别,而非Scenario级别:

  • 你的测试框架中,大概率在beforeFeature钩子函数里执行了Driver会话的初始化(比如driver.init()),导致每个Feature启动时就创建一个BrowserStack会话,但这个会话没有绑定具体Scenario步骤,所以仅执行了打开关闭应用就标记通过。
  • 随后beforeScenario钩子又再次初始化会话,执行实际的Scenario测试步骤,从而产生了第二个有效会话。
  • dryRun: false仅控制是否执行测试步骤,不影响钩子函数的执行逻辑,所以无法解决这个问题。

解决方案

1. 调整钩子函数的会话生命周期

修改测试代码中的钩子配置,将会话初始化与销毁逻辑完全绑定到Scenario级别:

  • 删除beforeFeature中所有创建Driver会话的代码(比如await driver.init())。
  • 在beforeScenario钩子中执行会话初始化:
    Before(async function () {
      await driver.init();
    });
    
  • 在afterScenario钩子中销毁会话:
    After(async function () {
      await driver.deleteSession();
    });
    

(注:如果使用的是WebdriverIO的wdio.conf.js配置钩子,对应修改beforeScenario和afterScenario字段)

2. 检查WebdriverIO配置

  • 确认wdio.conf.js中的services: ['browserstack']配置没有额外的自动会话创建逻辑,比如避免在onPrepare或beforeSession中提前初始化Driver。
  • 检查cucumberOpts中的require字段,确保没有重复加载包含钩子逻辑的文件,导致钩子被多次注册。

3. 验证BrowserStack集成配置

  • 确保wdio-browserstack-service的配置中,browserstackLocal的启动与销毁逻辑不会触发额外会话,比如:
    services: [
      ['browserstack', {
        browserstackLocal: true,
        localIdentifier: process.env.BROWSERSTACK_LOCAL_ID
      }]
    ]
    
    避免在localIdentifier或其他配置中导致重复会话创建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:27:11