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

如何将beforeAll中的testContext传递给Playwright其他测试用例?

解决Playwright+TypeScript中beforeAll与测试用例testContext实例不一致的问题

核心原因

Playwright的beforeAll是套件级钩子,它接收的testContext属于整个测试套件;而每个测试用例的testContext是独立的用例级实例,默认相互隔离,所以两者不是同一个对象。

方案一:用test.extend扩展全局testContext共享前置状态

通过自定义扩展test函数,把登录后的状态注入到所有测试用例的testContext中,既保证只执行一次前置操作,又让每个用例能拿到共享的认证数据。

// 定义要扩展的上下文类型
type TestContextExtension = {
  authenticatedHomePage: HomePage;
};

// 扩展test函数,注入共享的认证状态
const testWithAuth = test.extend<TestContextExtension>({
  authenticatedHomePage: async ({ testContext }, use) => {
    // 只初始化一次认证页面
    if (!globalThis.authenticatedHomePage) {
      const authApi = await testContext.getApi(AuthApi);
      await authApi.login(configProvider.loginEmail, configProvider.loginPassword);
      globalThis.authenticatedHomePage = await testContext.getPage(HomePage, {
        shouldNavigate: true,
      });
    }
    // 将共享实例传递给测试用例
    await use(globalThis.authenticatedHomePage);
  },
});

// 使用扩展后的test函数写用例
testWithAuth('Test1 - create', async ({ testContext, authenticatedHomePage }) => {
  // 直接用authenticatedHomePage,testContext也能正常做用例级操作
});

// 测试结束后清理全局变量
test.afterAll(() => {
  delete globalThis.authenticatedHomePage;
});

方案二:模块级变量存储共享数据,用例中复用

如果不想扩展test函数,可把beforeAll中拿到的关键数据(比如登录token)存在模块变量里,在每个用例的testContext中复用这些数据,避免重复执行登录。

// 模块级变量存认证token
let authToken: string;

test.beforeAll(async ({ testContext }) => {
  const authApi = await testContext.getApi(AuthApi);
  const res = await authApi.login(
    configProvider.loginEmail,
    configProvider.loginPassword
  );
  // 保存登录token
  authToken = res.data.token;
});

test('Test1 - create', async ({ testContext }) => {
  // 用保存的token初始化API,跳过登录
  const authApi = await testContext.getApi(AuthApi);
  authApi.setToken(authToken);
  
  // 用已认证状态初始化HomePage
  const homePage = await testContext.getPage(HomePage, {
    shouldNavigate: true,
    authToken: authToken,
  });
  
  // 测试逻辑
});

关键提醒

不要直接把beforeAll中的testContext或页面实例赋值给全局变量后在测试用例中使用,会导致上下文冲突,引发不可预料的错误。

内容的提问来源于stack exchange,提问作者Tal Angel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:42:45