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
相关产品推荐
相关产品推荐

