SuperAPI AI 工具集

test-specialist

测试与质量

查看项目

更新于 10-16 13:50

技能介绍

用途

Test Specialist 是一个测试编写模式技能,面向 JS/TS、Python、Go 和 Rust,用于指导单元测试、集成测试、E2E 测试与视觉回归测试的编写,并在用户明确要求测试时提供缺陷分析习惯。

何时使用

文档强调:仅当用户明确要求测试时才使用该技能。没有这一请求时,应通过审查改动(diff)及其涉及的代码来验证。

适用场景(在用户要求测试时):

  • 编写单元测试、集成测试或 E2E 测试
  • 提升测试覆盖率
  • 安全测试与性能测试

不适用场景:

  • 未要求测试的调试 → 使用 debug-systematic
  • 代码审查 → 使用 generic-code-reviewer
  • 技术债 → 使用 tech-debt-analyzer
  • 功能开发 → 使用 generic-feature-developer

按项目选测试栈

项目类型 单元测试 组件测试 E2E
React/Next.js Vitest/Jest Testing Library Playwright
Node.js Vitest/Jest Supertest Playwright
Static Jest - Playwright

浏览器自动化(Playwright、Percy、Chromatic、npx 浏览器安装)不会在所有者 Mac 上安装或运行。仅当用户要求时,通过其已批准的环境运行。

主要能力与代码模式

文档给出的测试模式包括:AAA 模式单元测试、面向用户行为的组件测试、Playwright E2E 测试、集成测试。

单元测试(AAA 模式)

describe("calculateTotal", () => {
  test("sums amounts correctly", () => {
    // Arrange
    const items = [{ amount: 100 }, { amount: 50 }];
    // Act
    const total = calculateTotal(items);
    // Assert
    expect(total).toBe(150);
  });

  test("handles empty list", () => {
    expect(calculateTotal([])).toBe(0);
  });
});

组件测试(用户行为)

// ✅ Test user behavior, not implementation
it('creates item when user clicks Add', async () => {
  const user = userEvent.setup();
  render(<ItemList />);

  await user.click(screen.getByRole('button', { name: /add/i }));
  await user.type(screen.getByLabelText(/title/i), 'New item');
  await user.click(screen.getByRole('button', { name: /save/i }));

  expect(screen.getByText('New item')).toBeInTheDocument();
});

E2E 测试(Playwright)

import { test, expect } from "@playwright/test";

test("user can complete checkout", async ({ page }) => {
  await page.goto("/products");

  // Add to cart
  await page.click('button:has-text("Add to Cart")');
  await page.click('a:has-text("Cart")');

  // Checkout
  await page.click('button:has-text("Checkout")');
  await page.fill('[name="email"]', "test@example.com");
  await page.click('button:has-text("Place Order")');

  // Verify
  await expect(page.locator("h1")).toContainText("Order Confirmed");
});

集成测试

test("POST /items creates item", async () => {
  const response = await request(app)
    .post("/api/items")
    .send({ name: "Test" })
    .expect(201);

  expect(response.body).toMatchObject({ id: expect.any(Number) });
});

缺陷分析流程

  1. 复现 - 记录确切步骤、预期与实际结果
  2. 隔离 - 二分查找、最小复现
  3. 根因 - 追踪执行、检查假设、git blame
  4. 修复 - 修复根因(仅在用户要求测试时先写失败测试)
  5. 验证 - 对照复现与边界情况审查改动及其涉及代码路径

调试检查清单

  • [ ] 能否稳定复现
  • [ ] 已创建最小复现
  • [ ] 已检查控制台/网络日志
  • [ ] 已检查失败点的状态
  • [ ] 已用 git blame 检查近期改动
  • [ ] 已对照复现审查修复(仅在要求测试时写失败测试)

常见缺陷模式

  • 竞态条件:并发更新测试
  • 空值安全:对 null、undefined、空串、0 等无效输入的处理
  • 边界值:空集合、单元素、最后一页不完整等

文档给出对应示例代码。

安全与性能测试

  • 安全测试:SQL 注入防护、XSS 清理、鉴权要求
  • 性能测试:大数据集处理耗时断言

以上均给出代码示例。

覆盖率目标

代码类型 目标
关键路径 90%+
业务逻辑 85%+
UI 组件 75%+
工具函数 70%+

测试质量原则

  1. 每个测试只验证一个行为
  2. 名称具描述性 - 测试名说明场景
  3. 测试相互独立 - 无共享状态
  4. 覆盖边界情况 - 空值、空集合、边界、错误
  5. Mock 外部依赖 - 测试应当快速
  6. 测试行为 - 而非实现细节

工作流决策表

情况 操作
添加功能(要求测试) 先写测试(TDD)
修复缺陷(要求测试) 先写失败测试,再修复
提升覆盖率 找缺口,优先关键路径
代码审查 检查边界情况、错误处理

Python 测试(pytest)

内容包括 fixture 与 parametrize、Mocking、conftest.py 模式,并给出代码示例:

  • fixture:提供带测试数据库的 UserService、创建示例用户
  • 测试类:创建用户、用户不存在时抛出异常、parametrize 校验邮箱
  • Mocking:patch 邮件客户端、AsyncMock 异步 mock
  • conftest.py:session 作用域 engine、function 作用域 db_session

Go 测试

  • 表驱动测试:CalculateDiscount 的多用例结构
  • testify:断言与 mock,含 MockUserRepo、require.NoError、assert.Equal、repo.AssertExpectations
  • HTTP handler 测试:httptest.NewRequest / NewRecorder、解码响应体并断言

Rust 测试

  • 单元测试(同文件 #[cfg(test)] mod tests)与集成测试(tests/integration_test.rs)
  • 示例:calculate_discount 的有效折扣、零折扣、非法百分比、负百分比
  • 属性测试(proptest):折扣不超过原值、序列化往返一致

视觉回归测试

  • Playwright 截图:toHaveScreenshot、maxDiffPixelRatio、组件状态与移动端视口;更新快照命令为 npx playwright test --update-snapshots
  • Percy:@percy/playwright 的 percySnapshot,跨浏览器与视口尺寸比较
  • Chromatic:npx chromatic --project-token=<token>,捕获 Storybook 每个 story 的视觉快照并检测像素级变化
工具 方式 最适合
Playwright 本地截图对比 E2E 视觉测试,免费
Percy 云端跨浏览器对比 多浏览器、团队评审
Chromatic Storybook story 快照 组件库视觉 QA

限制与注意

  • 仅在用户明确要求测试时使用;未要求测试的调试应改用 debug-systematic
  • 浏览器自动化不在所有者 Mac 上安装或运行,仅在用户要求时通过其已批准的环境运行
  • 收费、价格、平台等未在资料中提供

另见

  • 代码审查标准(../_shared/CODE_REVIEW_STANDARDS.md)
  • 项目 CLAUDE.md - 测试规则