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

如何在Playwright中向URL传递ID这类变量?

如何在Playwright中向URL传递ID这类变量?

嗨,这问题其实很简单,你已经离答案很近啦!你已经成功拿到了新创建用户的ID,现在只需要利用JavaScript的模板字符串(就是你代码里已经在用的反引号`)把ID拼接进删除请求的URL里就行。

我分两种常见场景给你讲清楚:

场景1:创建和删除在同一个测试用例里

如果创建用户和删除用户是同一个测试步骤里的操作,直接在同一个async函数里使用拿到的ID变量就好,因为作用域是共享的。调整后的代码应该是这样:

test('创建并删除新用户', async ({ request }) => {
  // 1. 先创建用户并获取ID
  const createResponse = await request.post('/public/v2/users/', {
    // 这里替换成你创建用户的请求体参数
    data: {
      name: "测试用户",
      email: "test_user@example.com"
    }
  });
  const responseJson = await createResponse.json();
  const userId = responseJson.id;
  console.log("新创建的用户ID:", userId);

  // 2. 用拿到的ID发起删除请求
  const deleteResponse = await request.delete(`/public/v2/users/${userId}`);
  // 可以加个断言验证删除是否成功
  expect(deleteResponse.status()).toBe(200);
});

核心就是把URL写成`/public/v2/users/${userId}`,模板字符串会自动把userId的实际值替换进去,生成类似/public/v2/users/123这样的完整路径。

场景2:创建和删除在不同测试用例里

如果创建用户是前置操作,删除是单独的测试用例,那你需要把ID存到一个能被删除测试访问到的地方,比如用test.beforeAll来提前创建用户并保存ID:

// 定义一个全局变量来存用户ID
let userId;

// 所有测试执行前先创建用户
test.beforeAll(async ({ request }) => {
  const createResponse = await request.post('/public/v2/users/', {
    data: {
      name: "前置创建用户",
      email: "pre_create@example.com"
    }
  });
  const responseJson = await createResponse.json();
  userId = responseJson.id;
});

test('删除已创建的用户', async ({ request }) => {
  // 直接用全局的userId拼URL
  const deleteResponse = await request.delete(`/public/v2/users/${userId}`);
  expect(deleteResponse.status()).toBe(200);
});

不过要注意,如果你的测试是并行运行的,全局变量可能会有冲突,这种情况建议用Playwright的测试上下文传递参数,或者确保测试串行执行。

总的来说,核心就是用模板字符串把变量插入到URL中,只要保证变量在删除请求的作用域内可访问就行啦!

备注:内容来源于stack exchange,提问作者Alan Diego Silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:09:34