如何在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,提问作者Анна Тот
相关产品推荐
相关产品推荐

