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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:02:29