用途
该技能面向使用 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。
限制
资料中未提供价格、平台要求、安装命令等具体信息,暂未提供。