mcpField
E
e2e-testing

e2e-testing

github.com/oakoss测试与质量20133 次安装11 周前更新
代码仓库

关于 e2e-testing

面向 Playwright 端到端测试架构与模式的技能,帮助团队组织测试套件,并规划认证、模拟、无障碍检查、视觉回归和 CI 并行执行。

主要功能

  1. 01测试套件与 Page Object 结构
  2. 02复用认证状态
  3. 03网络模拟与 HAR 重放
  4. 04视觉回归与无障碍检查
  5. 05CI 分片与并行报告

适用场景

  1. 01规划易维护的 E2E 测试套件
  2. 02模拟外部服务以稳定测试
  3. 03将测试拆分到多个 CI 机器
  4. 04添加无障碍和视觉检查

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/oakoss/agent-skills --skill e2e-testing

安装后在 Claude Code 中输入/e2e-testing确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
accessibility.md
authentication.md
ci-sharding.md
fixtures.md
locators.md
mocking.md
page-objects.md
test-organization.md
visual-testing.md

详细介绍

端到端测试

概述

介绍使用 Playwright 进行端到端测试的架构和模式——如何构建测试套件、组织测试,以及如何运用经过验证的模式来处理身份验证、模拟、视觉回归、无障碍审查和 CI 并行执行。重点在于测试模式的原因和适用时机,而非 Playwright API 的具体细节。

适用场景: 设计测试套件架构、构建页面对象模型、规划 CI 分片策略、设置身份验证流程、使用标签和注释组织测试、实现视觉回归工作流、模拟网络请求、审查无障碍性。

不适用场景: 单元测试(使用 Vitest/Jest)、仅测试 API(使用集成测试)、隔离测试组件(使用组件测试运行器)。如需了解 Playwright API 详情、浏览器自动化、网页抓取或 Playwright 错误排查,请使用 playwright 技能。

快速参考

模式API/工具要点
基于角色的定位器getByRole, getByText, getByLabel优先于 CSS/XPath 选择器
页面对象模型tests/pages/ 中的类封装所有页面专属的定位器和操作
身份验证storageState + setup 项目只需验证一次,即可在测试间复用
视觉回归expect(page).toHaveScreenshot()遮罩动态内容,避免测试不稳定
无障碍审计来自 @axe-core/playwright 的 AxeBuilder在关键流程中使用 .withTags() + .analyze()
Trace 调试trace: 'on-first-retry'完整的 DOM 快照、网络日志和时间线
网络模拟page.route()无需依赖第三方服务即可运行稳定的测试
HAR 回放page.routeFromHAR()根据录制的流量创建高保真模拟
屏蔽图像page.route('**/*.{png,jpg}', abort)跳过图像以加快测试
CI 分片--shard=1/4将测试套件拆分到多台并行 CI 机器上
Blob 报告--reporter=blob + merge-reports将分片结果合并为单份报告
测试标签{ tag: ['@smoke'] }使用 --grep 按类别筛选测试
测试步骤test.step('name', async () => {})在 Trace Viewer 和报告中对操作分组
仅运行变更的测试--only-changed=$GITHUB_BASE_REF仅运行自基准分支以来发生变更的测试文件
原生无障碍检查toHaveAccessibleName, toHaveRole完整 axe-core 扫描的轻量替代方案
在报告中包含 Git 信息reporter 选项 captureGitInfo将测试报告关联到提交,便于调试 CI
Web 优先断言expect(element).toBeVisible()自动等待,而非使用 waitForTimeout
Fixture 组合mergeTests() / mergeExpects()将 3 个或更多 fixture 模块合并到一个 test 中
自动 Fixture在 test.extend() 中设置 { auto: true }为每项测试运行(日志记录、截图)
Fixture 选项在 test.extend() 中设置 { option: true }可通过配置或 test.use() 进行配置
数据驱动测试生成 test() 调用的 for...of 循环根据数组或 CSV 文件创建参数化测试
上下文模拟browser.newContext() 选项locale、timezone、colorScheme、offline、isMobile
在一项测试中使用两种角色并发调用 browser.newContext()为每个上下文分别设置 storageState

常见错误

错误正确做法
使用 page.waitForTimeout() 等待元素可见使用 expect(element).toBeVisible() 等优先等待的断言,让其自动等待
直接在测试文件中编写原始定位器将所有选择器封装在 Page Object Model 类中
直接测试第三方 API(Stripe、Auth0)使用 page.route() 模拟外部服务,确保测试稳定、快速
使用截图而非跟踪记录来调试 CI 故障配置 trace: 'on-first-retry' 并使用 Playwright Trace Viewer
通过全局变量在测试之间共享状态每个测试使用全新的 BrowserContext,实现完全隔离
在单个 CI 任务中运行所有测试在多台并行机器上使用 Playwright 分片(--shard=1/N)
使用 CSS/XPath 选择器定位元素使用基于角色的定位器,使其在重构后仍有效并确保可访问性
每个测试都通过 UI 登录使用 storageState 配合 setup 项目,只需验证身份一次
使用 axe-playwright 中的 injectAxe/checkA11y使用 @axe-core/playwright 中的 AxeBuilder 和 .analyze()
将 storageState JSON 文件提交到 git将 playwright/.auth/ 添加到 .gitignore
在登出测试中依赖 storageState登出会使服务端会话失效——每个登出测试都通过 UI 登录
假设 storageState 会持久化 sessionStorage它只会保存 Cookie 和 localStorage——使用 addInitScript() 处理 sessionStorage
为不同地区/货币变体重复编写测试代码使用 fixture 选项({ option: true }),并按项目覆盖配置
创建 3 个及以上模块的 fixture,却不使用 mergeTests()使用 mergeTests() 将 fixture 文件组合成一个 test 导出

任务委派

  • 发现哪些用户流程缺少 E2E 覆盖:使用 Explore Agent
  • 为应用构建完整的 Page Object Model 测试套件:使用 Task Agent
  • 为大型测试套件规划 CI 分片策略:使用 Plan Agent

对于 Playwright API 详情、浏览器自动化、抓取、隐身模式、截图/PDF、Docker 部署或 Playwright 错误排查,请使用 playwright skill。

参考资料

评论

支持 Markdown