SuperAPI AI 工具集

test-automator

测试与质量

查看项目

更新于 10-15 08:47

技能介绍

用途

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 工具中的调用方式或集成说明。
  • 资料未提供版本兼容性、语言支持范围或性能基准。