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

