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

如何在Playwright HTML测试报告中展示历史构建结果?

简便实现Playwright测试报告展示上一次Jenkins构建状态的方法

核心思路

避开onTestEnd无法访问test.info()的问题,提前拉取Jenkins历史数据,在测试执行前给每个用例附加上次状态信息,直接展示在HTML报告中。


步骤1:预拉取Jenkins历史构建数据

用Jenkins API获取历史构建的测试结果,存在全局变量中供后续测试用例调用。可以在测试入口文件或playwright.config.js中实现:

const axios = require('axios');
// 存储用例级别上次构建状态,key为用例标题,value为状态(成功/失败)
let lastTestCaseStatus = {};

async function fetchJenkinsLastTestResult() {
  // 替换为你的Jenkins job地址,这里以JUnit测试报告为例
  const jenkinsApiUrl = 'http://your-jenkins/job/your-test-job/lastCompletedBuild/testReport/api/json';
  // Jenkins账号+API Token转base64认证
  const auth = Buffer.from('your-username:your-api-token').toString('base64');
  
  try {
    const res = await axios.get(jenkinsApiUrl, {
      headers: { Authorization: `Basic ${auth}` }
    });
    // 遍历所有测试用例,提取上次状态
    res.data.suites.forEach(suite => {
      suite.cases.forEach(testCase => {
        lastTestCaseStatus[testCase.name] = testCase.status === 'PASSED' ? '✅ 成功' : '❌ 失败';
      });
    });
  } catch (err) {
    console.error('拉取Jenkins历史数据失败:', err.message);
  }
}

// 测试启动前执行一次数据拉取
fetchJenkinsLastTestResult();

步骤2:在测试前置钩子中附加状态到报告

利用test.beforeEach钩子(可正常访问test.info()),将上次构建状态添加到用例的注释或附件中,HTML报告会自动展示这些信息:

import { test } from '@playwright/test';

test.beforeEach(async ({}, testInfo) => {
  const currentTestTitle = testInfo.title;
  const lastStatus = lastTestCaseStatus[currentTestTitle] || '🔍 无历史数据';
  
  // 方式1:添加报告注释(会显示在用例详情的Annotations区域)
  testInfo.annotations.push({
    type: '上次构建状态',
    description: lastStatus
  });

  // 方式2:添加附件(会显示在用例详情的Attachments区域,更醒目)
  await testInfo.attach('上次构建状态', {
    body: lastStatus,
    contentType: 'text/plain'
  });
});

简化替代方案(全局构建状态)

如果不需要用例级别的细粒度,只需要展示整个构建的上次状态,可直接用Jenkins环境变量:

  1. 在Jenkins构建任务中,添加环境变量PREV_BUILD_STATUS,值设为${BUILD_PREVIOUS_BUILD_STATUS}(需确保Jenkins支持该变量,或通过插件获取)
  2. 测试中读取环境变量,同样在beforeEach中附加到报告:
test.beforeEach(async ({}, testInfo) => {
  const lastBuildStatus = process.env.PREV_BUILD_STATUS || '未知';
  testInfo.annotations.push({
    type: '上次构建状态',
    description: lastBuildStatus
  });
});

注意事项

  • 确保Jenkins API权限足够,API Token需拥有读取构建报告的权限
  • 若使用用例级别状态,需Jenkins已配置JUnit等测试报告插件,能输出每个用例的独立结果
  • 避免在onTestEnd中处理,优先用beforeEach完成状态附加,更稳定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:13:23