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

如何在WDIO+Mocha框架下获取测试执行结果并存储到变量中

WDIO+Mocha获取测试结果实现方案

现有代码问题

你手动实例化Runnable后没有主动触发执行逻辑,Mocha不会自动调度你自定义创建的Runnable实例,因此state始终为初始值undefined,且这种嵌套测试逻辑的写法不符合框架的常规使用规范。

正确实现方式

你不需要手动创建Runnable实例,直接通过Mocha暴露的生命周期钩子就可以拿到当前测试用例的执行状态,根据使用场景分为两种实现方案:

方案1:单测试文件内收集结果

直接在测试文件内使用afterEach钩子获取每条用例的执行状态:

// 定义变量存储测试结果
const testResults = []

describe('some title', () => {
  // 每条用例执行完成后自动触发
  afterEach(function () {
    // this.currentTest就是当前用例的Runnable实例
    testResults.push({
      caseTitle: this.currentTest.title,
      status: this.currentTest.state, // 返回值为passed/failed/skipped
      errorMsg: this.currentTest.err?.message || null
    })
  })

  it('some title', async () => {
    // 这里直接写你的测试逻辑即可,不需要自定义Runnable
    expect(await (await somePage1.someProp1).getText()).equal('some text 1');
    expect(await (await SomePage2.someProp2).getText()).equal('some text 2');
  });
})

// 所有用例执行完成后可统一处理结果
after(function () {
  console.log('全部测试结果:', testResults)
  // 可在此处做持久化存储、上报等操作
})

方案2:全局收集所有测试文件结果

直接在wdio.conf.js配置文件中添加钩子,不需要每个测试文件重复写逻辑:

exports.config = {
  // 其余WDIO配置保持不变
  mochaOpts: {
    // 其余Mocha配置保持不变
    afterTest: function (test, context, { error, passed, duration }) {
      // 挂载到global对象上可以在任意位置访问结果
      global.allTestResults = global.allTestResults || []
      global.allTestResults.push({
        caseTitle: test.title,
        isPassed: passed, // 直接返回布尔值的通过状态
        errorMsg: error?.message || null,
        runDuration: duration
      })
    }
  }
}

内容的提问来源于stack exchange,提问作者Анна Тот

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:06:03