SuperAPI AI 工具集

e2e-test-conventions

测试与质量

查看项目

更新于 10-15 16:43

技能介绍

用途:为 Playwright + TypeScript 的 E2E 测试提供统一约定,适用于生成、修改或审查测试代码时遵循。技术栈为 Playwright 做浏览器自动化与测试运行,测试代码全部使用 TypeScript,不绑定具体 UI 框架。

主要能力与结构:e2e/ 目录固定布局,含 auth/(认证 setup)、fixtures/(自定义 fixture)、helpers/(共享工具,非页面对象)、poms/(页面对象,每页一文件,均继承 base.page.ts)、test-data/(JSON 测试数据)、tests/(按 regression、handover、smoke 套件组织)。不得在此结构外创建文件,未经许可不得移动文件。

运行方式:在 e2e/ 目录执行 npx playwright test 运行全部浏览器与套件;可用 --project="chromium:regression"、--project=":smoke"、--project="firefox:" 过滤。项目命名采用 {browser}:{suite},浏览器含 chromium、firefox、webkit、mobile-chrome、mobile-safari。

命名与独立性:POM 用 {feature}.page.ts,回归与冒烟用 {feature}.spec.ts,交接用 {TICKET}-{description}.spec.ts,数据用 {feature}.json,feature 名称需跨文件一致。每个测试必须完全独立、可任意顺序并行运行,数据加时间戳与随机后缀,自行创建、验证并清理。

认证与导航:认证只在 auth/auth.setup.ts 的 setup 项目中执行一次,通过 storageState 复用;禁止在 spec、POM、beforeEach、beforeAll 中写登录逻辑。若令牌存于 IndexedDB,使用 await page.context().storageState({ path: authFile, indexedDB: true });。导航一律用 page.goto('/dashboard') 直连 URL,不点击菜单,随后断言 URL 与关键元素可见。

选择器优先级:getByRole()、getByLabel()、getByText()、getByPlaceholder(),最后才用 locator() 配 CSS/filter()。BasePage 只放跨页面复用的辅助方法,页面专属逻辑留在派生 POM;同一辅助方法出现第二次即上移到 BasePage。

环境配置:TEST_ENV 必填,缺失时 env-config.ts 立即抛错,防止误跑生产。按 .env.local、.env.dev、.env.test、.env.uat、.env.production 区分环境,变量名一致,含 BASE_URL、LOGIN_EMAIL、LOGIN_PASSWORD、AUTH_FILE。helpers/env-config.ts 用 dotenv 两层加载 e2e/.env 与 e2e/.env.{env},已存在的变量不被覆盖,导出 getEnvConfig()、getBaseUrl()、getCredentials()、getAuthFilePath()。必填变量缺失即抛错,不设硬编码默认值;.env.* 含密钥且被 git 忽略,仅提交 .env.example。

测试数据与 spec 规则:数据统一放 e2e/test-data/{feature}.json,禁止硬编码;用自定义 fixture 加载并加唯一后缀;始终从自定义 fixtures 导入 test。spec 中所有页面交互经 POM,不得直接调用 page.getByRole()、page.locator() 等;page 仅可用于传给 POM 构造函数或在 beforeAll 创建上下文,用 test.beforeAll 手动创建上下文调用 POM 的 setUp() 做清理。

限制:资料未提供具体框架适配示例、CI 集成方式及性能指标,相关细节暂未提供。