如何在Playwright中从beforeEach向测试用例传递值
在Playwright中把beforeEach生成的值传给测试用例
有两种靠谱的方式实现需求,还能避免并行测试时的变量污染问题:
方法一:扩展自定义Fixture(官方推荐)
用test.extend()创建专属fixture,把生成的用户对象作为fixture的一部分,每个测试用例直接解构就能用,还能顺便做测试后的资源清理:
// 先扩展自定义fixture const test = baseTest.extend({ user: async ({ request }, use) => { // 每个测试前创建用户 const user = await createUser(request); // 把user传给测试用例 await use(user); // 可选:测试完成后删除用户,清理测试数据 await deleteUser(request, user.id); }, }); test.describe('业务操作测试', () => { test('操作场景1', async ({ page, user }) => { // 直接用user变量就行 console.log(user.username); // 写你的测试逻辑 }); });
方法二:挂载到测试上下文对象
如果不想改fixture结构,也可以把生成的user挂载到test.info()对象上,测试用例里直接取:
test.beforeEach(async ({ page, request }) => { const user = await createUser(request); // 把user存到测试信息对象里 test.info().user = user; }); test.describe('业务操作测试', () => { test('操作场景1', async ({ page }) => { // 从测试信息对象里取出user const user = test.info().user; console.log(user.id); // 写你的测试逻辑 }); });
注意
别用全局变量传值!Playwright默认并行跑测试,全局变量会被不同测试覆盖,导致数据乱掉。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

