Playwright API测试中如何打印请求对象?求可行方案
解决Playwright API测试中打印请求对象的问题
你当前代码里的request是Playwright的APIRequestContext上下文对象,并非单个请求的具体数据,直接打印它自然看不到你需要的请求内容。下面提供几种可行的打印方式:
1. 直接打印发送的请求Payload
你要发送的请求数据就是post方法里的data参数,单独提取后打印即可:
test("create new stuff", async ({request}) => { const requestData = { name: "test 123", parentTagId: "60b2b3ce-fa32-4b65-8f71-83e9efc75638", type: 1 }; // 打印请求Payload console.log("发送的请求数据:", requestData); const newIssue = await request.post(`http://xyz/account/00000/test`, { data: requestData }); // 删掉错误断言:request是上下文对象,不能和状态码201比较 expect(newIssue.status()).toEqual(201); // 解析响应体(body()返回Promise,需await) const responseBody = await newIssue.json(); expect(responseBody).toContainEqual(expect.objectContaining({ title: '[Bug] report 1', body: 'Bug description' })); });
2. 打印完整请求详情(含URL、Method、Headers等)
如果需要查看整个请求的完整信息,可以在发送前构造并打印:
test("create new stuff", async ({request}) => { const url = `http://xyz/account/00000/test`; const requestData = { name: "test 123", parentTagId: "60b2b3ce-fa32-4b65-8f71-83e9efc75638", type: 1 }; // 打印完整请求信息 console.log("请求URL:", url); console.log("请求方法:", "POST"); console.log("请求默认Headers:", await request.headers()); console.log("请求Body:", requestData); const newIssue = await request.post(url, { data: requestData }); expect(newIssue.status()).toEqual(201); const responseBody = await newIssue.json(); expect(responseBody).toContainEqual(expect.objectContaining({ title: '[Bug] report 1', body: 'Bug description' })); });
3. 全局监听所有请求事件
如果想监控测试中所有的请求,可以在测试钩子中添加事件监听:
test.beforeEach(async ({ context }) => { context.on("request", (req) => { console.log(`请求: ${req.method()} ${req.url()}`); console.log("请求Body:", req.postData()); console.log("请求Headers:", req.headers()); }); }); test("create new stuff", async ({request}) => { const newIssue = await request.post(`http://xyz/account/00000/test`, { data: { name: "test 123", parentTagId: "60b2b3ce-fa32-4b65-8f71-83e9efc75638", type: 1 } }); expect(newIssue.status()).toEqual(201); const responseBody = await newIssue.json(); expect(responseBody).toContainEqual(expect.objectContaining({ title: '[Bug] report 1', body: 'Bug description' })); });
另外注意你代码里的两处问题:
expect(request).toEqual(201);完全错误,request是上下文对象,不能和状态码比较,必须删除这行。newIssue.body()返回的是Promise,需要用await解析,用json()方法直接获取JSON格式响应体更便于断言。
内容的提问来源于stack exchange,提问作者pk786
相关产品推荐
相关产品推荐

