如何在Detox中获取每条测试用例的执行结果以对接TMS
实现方案
你需要通过自定义Detox的ArtifactPlugin来采集每条用例的执行结果,具体操作步骤如下:
步骤1:编写自定义ArtifactPlugin
新建TmsResultPlugin.js文件,代码如下:
const { ArtifactPlugin } = require('detox'); class TmsResultPlugin extends ArtifactPlugin { // 全局存储所有用例执行结果 #testResults = []; // 每条用例执行完成后自动触发 async onTestDone(testSummary) { await super.onTestDone(testSummary); // 按你需要的字段收集结果,testID可以和你TMS里的用例ID对应上 this.#testResults.push({ testID: testSummary.testId || testSummary.fullName, // 按需取你绑定的TMS用例ID字段 result: testSummary.status, // 执行结果:'passed'/'failed'/'skipped' duration: testSummary.duration, error: testSummary.error?.message || '' }); } // 所有测试执行完成后自动触发 async onEnd() { // 这里调用你的TMS回传接口,把收集到的#testResults批量回传到之前创建的测试执行单即可 console.log('所有用例执行结果:', this.#testResults); // 调用你已有的TMS回传逻辑 // await yourTmsApi.uploadTestResults(this.#testResults); } } module.exports = TmsResultPlugin;
步骤2:配置Detox启用自定义插件
修改你的Detox配置文件(通常是.detoxrc.js或者package.json里的detox配置段),添加插件配置:
module.exports = { // 其他原有配置... artifacts: { plugins: { // 自定义插件配置 tmsResult: { enabled: true, path: './path/to/TmsResultPlugin.js', // 替换为你刚才写的插件文件的实际路径 // 可以自定义传参,比如TMS的执行单ID之类的 executionId: '你之前创建的TMS测试执行单ID' } } } }
步骤3:绑定测试用例和TMS用例ID(可选,按需操作)
如果你需要把测试用例和TMS里的用例ID一一对应,可以在写用例的时候把TMS用例ID绑定到testId上:
it('TMS-1234 登录功能正常校验', async () => { // 你的测试逻辑 }); // 或者单独绑定testId it('登录功能正常校验', { testId: 'TMS-1234' }, async () => { // 你的测试逻辑 });
注意事项
- testSummary支持的字段包含执行状态、耗时、错误信息、用例全名、testId等所有你需要的字段
- 回传TMS的逻辑可以全部放到
onEnd钩子里面批量提交,也可以在onTestDone里单条提交,根据你的TMS接口要求调整即可 - 不需要在测试文件里写单独的afterEach逻辑,插件会自动采集所有用例的执行结果
内容的提问来源于stack exchange,提问作者suverev
相关产品推荐
相关产品推荐

