用途
test-automator 是一个自动化测试工程技能,专注于使用 Playwright、Cypress 和 AI 驱动测试工具构建端到端测试框架。其目标是建立可靠、可维护的自动化测试套件,并将其集成到 CI/CD 流水线中,同时支持视觉回归测试。
主要能力
- 搭建新的端到端测试框架(Playwright / Cypress)。
- 编写复杂测试场景,例如认证流程、支付网关。
- 实现视觉回归测试(Percy / Chromatic)。
- 调试不稳定测试,例如网络竞态条件。
- 配置 CI/CD 测试运行器,例如 GitHub Actions 分片。
- 实现组件测试,在隔离环境中测试 React / Vue / Svelte 组件。
使用方式
该技能提供决策框架、核心工作流、反模式与质量检查清单。
工具选择建议
- 现代 Web(React / Vue):推荐 Playwright,理由是速度快、定位器可靠、支持多标签页。
- 遗留或简单项目:推荐 Cypress,理由是开发体验好,但速度较慢且仅支持单标签页。
- 视觉测试:推荐 Percy / Chromatic,提供像素级差异对比(SaaS)。
- 移动原生:推荐 Appium / Maestro,用于真机自动化。
- 组件测试:推荐 Playwright CT / Vitest,无需完整应用栈即可渲染组件。
测试金字塔策略
- 单元测试(70%):快速、隔离,由开发负责。
- 集成 / 组件测试(20%):模拟 API、真实 UI,共同负责。
- 端到端测试(10%):全栈、真实 API,由 QA 负责,仅保留关键路径。
核心工作流示例
Playwright 框架搭建:
安装命令:
npm init playwright@latest
# Select: TypeScript, GitHub Actions, Install Browsers
配置示例(playwright.config.ts):
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
testDir: './tests',
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 1 : undefined,
reporter: 'html',
use: {
baseURL: 'http://localhost:3000',
trace: 'on-first-retry',
video: 'retain-on-failure',
},
projects: [
{ name: 'chromium', use: { ...devices['Desktop Chrome'] } },
{ name: 'firefox', use: { ...devices['Desktop Firefox'] } },
{ name: 'webkit', use: { ...devices['Desktop Safari'] } },
],
});
首个测试示例(tests/login.spec.ts):
import { test, expect } from '@playwright/test';
test('has title', async ({ page }) => {
await page.goto('/');
await expect(page).toHaveTitle(/My App/);
});
test('login flow', async ({ page }) => {
await page.goto('/login');
await page.getByLabel('Email').fill('user@example.com');
await page.getByLabel('Password').fill('password');
await page.getByRole('button', { name: 'Sign in' }).click();
await expect(page).toHaveURL('/dashboard');
});
API 测试示例:
test('create user via API', async ({ request }) => {
const response = await request.post('/api/users', {
data: {
name: 'Test User',
email: `test-${Date.now()}@example.com`
}
});
expect(response.ok()).toBeTruthy();
const body = await response.json();
expect(body.id).toBeDefined();
});
Playwright 分片并行(CI 并行):
GitHub Actions 策略:
strategy:
fail-fast: false
matrix:
shardIndex: [1, 2, 3, 4]
shardTotal: [4]
运行命令:
npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
合并报告:上传每个分片的 blob-report 产物,然后使用:
npx playwright merge-reports --reporter html ./all-blob-reports
最佳实践
测试设计:
- Page Object Model:将页面逻辑封装在对象中。
- 面向用户的定位器:使用 role、label、text,而不是 CSS。
- 单一职责:每个测试概念一个断言。
- 数据工厂:以编程方式创建测试数据。
防止不稳定:
- 等待策略:使用显式等待,而不是 sleep。
- 重试逻辑:在 CI 中实现智能重试。
- 测试隔离:测试之间无依赖。
- 确定性数据:使用稳定测试数据,而不是生产快照。
CI/CD 集成:
- 并行执行:最大化 worker 以快速反馈。
- 智能调度:优先运行关键测试。
- 失败分析:失败时捕获产物。
- 质量门禁:关键失败阻止合并。
维护:
- 定期清理:移除废弃测试。
- 定位器更新:保持定位器稳定。
- 代码审查:像审查生产代码一样审查测试代码。
- 指标:跟踪不稳定性和覆盖率趋势。
适用场景
- 需要从零搭建可维护的端到端测试框架。
- 需要测试复杂支付流程、认证流程。
- 需要防止设计密集型应用的 UI 回归。
- 需要在 CI 中并行运行大量测试并合并报告。
- 需要实现组件级测试或 API 集成测试。
限制与注意事项
- 资料未提供该技能的具体收费、价格、平台支持范围或效果保证。
- 资料未提供除 Playwright、Cypress、Percy、Chromatic、Appium、Maestro、Vitest 之外的工具支持细节。
- 资料未提供安装该技能本身的步骤,仅提供测试框架的安装命令。
- 资料未提供该技能在具体 AI 工具中的调用方式或集成说明。
- 资料未提供版本兼容性、语言支持范围或性能基准。