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

Playwright获取最后一次失败的API请求方法咨询

Playwright捕获测试失败时最后一次异常API请求的方案

Playwright完全支持捕获这类随机失败的API请求,核心思路是通过全局监听网络响应结合测试生命周期钩子来实现,具体步骤如下:

1. 全局记录所有非2xx状态的API请求

在测试初始化阶段,通过page.on('response')或browserContext.on('response')监听所有网络响应,筛选出状态码不在200-299区间的请求,将请求URL、方法、状态码、请求体、响应体等关键信息存入数组。

示例代码(JavaScript):

let failedRequests = [];

test.beforeEach(async ({ page }) => {
  failedRequests = []; // 每次测试前清空记录
  page.on('response', async (response) => {
    // 过滤非成功状态的响应
    if (response.status() < 200 || response.status() >= 300) {
      const req = response.request();
      // 收集关键信息,可按需调整字段
      failedRequests.push({
        url: req.url(),
        method: req.method(),
        statusCode: response.status(),
        requestBody: await req.postData() || '无请求体',
        responseBody: await response.text().catch(() => '非文本响应'),
        timestamp: new Date().toLocaleString()
      });
    }
  });
});

2. 测试失败时提取最后一次异常请求

利用test.afterEach钩子,判断测试是否失败,若失败则从记录数组中取出最后一项(即最后一次失败的API请求),输出或保存相关信息。

示例代码:

test.afterEach(async ({}, testInfo) => {
  // 测试通过则跳过处理
  if (testInfo.status === testInfo.expectedStatus) return;
  
  if (failedRequests.length === 0) {
    console.log('本次测试未捕获到失败的API请求');
    return;
  }
  
  const lastFailed = failedRequests.at(-1);
  console.log('=== 最后一次失败的API请求详情 ===');
  console.log(`请求地址: ${lastFailed.url}`);
  console.log(`请求方法: ${lastFailed.method}`);
  console.log(`状态码: ${lastFailed.statusCode}`);
  console.log(`请求体: ${lastFailed.requestBody}`);
  console.log(`响应体: ${lastFailed.responseBody}`);
});

补充说明

  • 若测试涉及多页面,建议改用browserContext.on('response')监听,可捕获上下文内所有页面的网络请求。
  • 针对二进制响应(如图片、文件),response.text()可能抛出异常,代码中已通过catch处理,可根据实际需求替换为response.body()获取二进制数据。
  • 可将失败请求信息写入本地日志文件,替代控制台输出,方便后续批量排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:20:13