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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:46:07