SuperAPI AI 工具集

playwright-fixtures-and-hooks

测试与质量

查看项目

更新于 10-16 03:28

技能介绍

用途

该技能面向使用 Playwright 编写测试的开发者,目的是掌握 Playwright 的 fixture 系统与生命周期钩子,从而实现测试状态管理和测试基础设施复用,构建可维护的测试套件。

主要能力

内置 Fixture

提供核心 fixture:page(页面实例)、context(浏览器上下文)、browser(浏览器实例)、request(API 请求上下文)。每个测试都会获得全新的 page 和 context。

  • Page fixture:可用于导航(page.goto)、交互(getByRole().click())、等待(waitForLoadState)、求值(page.title())。
  • Context fixture:可添加 cookies、授予权限(grantPermissions)、在同一上下文中创建额外页面,多个页面共享 cookies 和存储。
  • Browser fixture:可创建带自定义选项的上下文(viewport、locale、timezoneId、permissions)。
  • Request fixture:可发起 GET/POST 等 API 请求并断言响应状态与数据。

自定义 Fixture

通过 base.extend 定义自定义 fixture,支持 setup 与 teardown(在 use 前后执行)。支持两种作用域:test 作用域(每个测试创建一次)与 worker 作用域(每个 worker 创建一次,通过 { scope: 'worker' } 指定)。

认证 Fixture

可基于 storageState 创建已认证的页面(authenticatedPage),也可扩展为多用户角色(adminPage、userPage、guestPage)。配套的认证 setup 脚本可执行登录并保存 storageState 到文件。

数据库 Fixture

可创建数据库连接(如 PrismaClient)并设置 worker 作用域;可定义 cleanDb fixture 在测试前后清理数据;可定义种子数据 fixture(testUser、testProducts)。

API 模拟 Fixture

通过 page.route 模拟 API 响应,支持正常响应、条件模拟(mockFailedApi 返回 500、mockSlowApi 模拟慢网络),并在 use 后通过 page.unrouteAll() 清理。

生命周期钩子

支持 test.beforeAll、test.beforeEach、test.afterEach、test.afterAll。afterEach 可读取 testInfo.status 并在失败时附加截图。支持嵌套钩子(父级 beforeEach 先于子级执行)、条件钩子(如按 browserName 跳过)。

Fixture 依赖

支持 fixture 之间的依赖组合,例如 config → apiClient → authenticatedClient 的链式依赖,也可在单个 fixture 中组合 page、db、mockApi、testUser 多个 fixture。

进阶模式

  • 工厂 Fixture:返回 createUser、createProduct 等创建函数,并在 use 后清理已创建的数据。
  • 选项 Fixture:通过 [false, { option: true }] 定义可配置选项,如 slowNetwork,并在 page fixture 中根据选项调整行为。

使用方式

以 TypeScript 编写,从 @playwright/test 导入 test 与 expect,通过 base.extend 扩展 fixture,在测试函数参数中按名称注入所需 fixture。

限制

资料中未提供价格、平台要求、安装命令等具体信息,暂未提供。