TestingStrategyBuilder testing-strategy-builder

这个技能提供了全面的指导,帮助团队构建有效的测试策略,确保软件质量、可靠性和可维护性。关键词包括测试策略、质量保证、测试自动化、代码覆盖率等。

测试 0 次安装 0 次浏览 更新于 3/2/2026

测试策略构建器

概览

这个技能提供了构建有效测试策略的全面指导,以确保软件质量、可靠性和可维护性。无论是从头开始规划测试策略,还是在现有代码库中提高测试覆盖率,这个框架都可以帮助团队设计出健壮的测试方法。

何时使用这个技能:

  • 为新项目或功能规划测试策略
  • 在现有代码库中提高测试覆盖率
  • 建立质量门和覆盖率目标
  • 设计测试自动化架构
  • 创建测试计划和测试用例
  • 选择合适的测试工具和框架
  • 在CI/CD管道中实施持续测试

捆绑资源:

  • references/code-examples.md - 详细的测试代码示例
  • templates/test-plan-template.md - 综合测试计划模板
  • templates/test-case-template.md - 测试用例文档模板
  • checklists/test-coverage-checklist.md - 覆盖率验证清单

所需工具

这个技能提到了以下测试工具。并非所有工具都是必需的 - 技能会根据你的项目推荐合适的工具。

JavaScript/TypeScript 测试

  • Jest: 最流行的测试框架

    • 安装: npm install --save-dev jest @types/jest
    • 配置: npx jest --init
  • Vitest: Vite原生测试框架

    • 安装: npm install --save-dev vitest
    • 配置: 添加到 vite.config.ts
  • Playwright: 端到端测试

    • 安装: npm install --save-dev @playwright/test
    • 设置: npx playwright install
  • k6: 性能测试

    • 安装 (macOS): brew install k6
    • 安装 (Linux):k6.io 下载
    • 命令: k6 run script.js

Python 测试

  • pytest: 标准 Python 测试框架

    • 安装: pip install pytest
    • 命令: pytest
  • pytest-cov: 覆盖率报告

    • 安装: pip install pytest-cov
    • 命令: pytest --cov=.
  • Locust: 性能测试

    • 安装: pip install locust
    • 命令: locust -f locustfile.py

覆盖率工具

  • c8: JavaScript/TypeScript 覆盖率

    • 安装: npm install --save-dev c8
    • 命令: c8 npm test
  • Istanbul/nyc: 替代 JS 覆盖率

    • 安装: npm install --save-dev nyc
    • 命令: nyc npm test

安装验证

# JavaScript/TypeScript
jest --version
vitest --version
playwright --version
k6 version

# Python
pytest --version
locust --version

# 覆盖率
c8 --version
nyc --version

注意: 技能会指导你根据项目框架(React, Vue, FastAPI, Django 等)和测试需求选择合适的工具。

测试理念

测试奖杯 🏆

现代测试遵循“测试奖杯”模型(从测试金字塔演变而来):

         🏆
       /    \
      /  E2E  \         ← 少数(关键用户旅程)
     /----------\
    / 集成 \      ← 多数(组件交互)
   /--------------\
  /     单元       \    ← 最多(业务逻辑)
 /------------------\
/  静态分析   \  ← 基础(代码检查,类型检查)

原则:

  1. 静态分析:在运行时之前捕获语法错误、类型问题和常见错误
  2. 单元测试:测试隔离的业务逻辑
  3. 集成测试:测试组件如何协同工作
  4. E2E 测试:验证关键用户工作流程端到端

平衡: 70% 集成,20% 单元,10% E2E(根据上下文调整)


测试策略框架

1. 覆盖率目标

推荐目标:

  • 总体代码覆盖率:最低 80%
  • 关键路径:95-100%(支付,认证,数据变更)
  • 新功能:100% 覆盖率要求
  • 业务逻辑:90%+ 覆盖率
  • UI 组件:70%+ 覆盖率

覆盖率类型:

  • 行覆盖率:执行代码行的百分比
  • 分支覆盖率:采取决策分支的百分比
  • 函数覆盖率:被调用函数的百分比
  • 语句覆盖率:执行语句的百分比

重要: 覆盖率是一个指标,不是目标。100% 覆盖率 ≠ 无缺陷代码。

2. 测试分类

静态分析

目的:在运行时之前捕获错误 工具:ESLint, Prettier, TypeScript, Pylint, mypy, Ruff 何时运行: 提交前钩子,CI 管道

单元测试

目的:测试隔离的业务逻辑 工具:Jest, Vitest, pytest, JUnit 特点:

  • 快速执行(每个测试 < 100ms)
  • 无外部依赖(数据库,API,文件系统)
  • 确定性(相同输入 = 相同输出)
  • 测试单一责任

覆盖率目标: 业务逻辑 90%+

查看 references/code-examples.md 获取详细的单元测试示例。

集成测试

目的:测试组件交互 工具: 测试库,Supertest, pytest 与 fixtures 特点:

  • 测试多个单元一起工作
  • 可以使用测试数据库或模拟外部服务
  • 适度执行时间(每个测试 < 1s)
  • 专注于接口和契约

覆盖率目标: API 端点和组件交互 70%+

查看 references/code-examples.md 获取 API 集成测试示例。

端到端 (E2E) 测试

目的:验证关键用户旅程 工具: Playwright, Cypress, Selenium 特点:

  • 测试整个应用程序流程(前端 + 后端 + 数据库)
  • 慢速执行(每个测试 5-30s)
  • 在类似生产的环境中运行
  • 专注于业务关键路径

覆盖率目标: 5-10 关键用户旅程

查看 references/code-examples.md 获取完整的 E2E 测试示例。

性能测试

目的:在负载下验证系统性能 工具: k6, Artillery, JMeter, Locust 类型:

  • 负载测试:系统在预期负载下的行为
  • 压力测试:识别故障点
  • 尖峰测试:处理突然流量激增
  • 浸泡测试:长时间持续负载(内存泄漏)

覆盖率目标: 测试所有性能关键端点

查看 references/code-examples.md 获取 k6 负载测试示例。


测试计划

1. 基于风险的测试

根据风险评估优先测试:

高风险(100% 覆盖率要求):

  • 支付处理
  • 认证和授权
  • 数据变更(创建,更新,删除)
  • 安全关键操作
  • 合规相关功能

中风险(80% 覆盖率):

  • 业务逻辑
  • 数据转换
  • API 集成
  • 电子邮件/通知系统

低风险(50% 覆盖率):

  • UI 样式
  • 静态内容
  • 只读操作
  • 非关键功能

2. 测试用例设计

给定-当-则模式:

给定 [初始上下文]
当 [动作发生]
则 [预期结果]

这种模式使测试保持清晰和专注。查看 references/code-examples.md 获取实现示例。

3. 测试数据管理

策略:

  • 固定装置:预定义的 JSON/YAML 文件中的测试数据
  • 工厂:程序性生成测试数据
  • 播种机:用已知数据填充测试数据库
  • Faker 库:生成逼真的随机数据

查看 references/code-examples.md 获取测试工厂和固定装置示例。


测试模式和最佳实践

1. AAA 模式(安排-行动-断言)

将测试结构化为三个清晰的阶段:

  • 安排:设置测试数据和上下文
  • 行动:执行被测试的动作
  • 断言:验证预期结果

查看 references/code-examples.md 获取详细的 AAA 模式示例。

2. 测试隔离

每个测试应该是独立的:

  • 对每个测试使用新的测试数据库
  • 在每个测试后清理资源
  • 测试不依赖于执行顺序

查看 references/code-examples.md 获取测试隔离模式。

3. 模拟与真实依赖

何时模拟:

  • 外部 API(支付网关,第三方服务)
  • 慢速操作(文件 I/O,网络调用)
  • 非确定性行为(当前时间,随机值)
  • 难以测试的场景(错误条件,边缘情况)

何时使用真实依赖:

  • 快速,确定性操作
  • 关键业务逻辑
  • 数据库操作(使用测试数据库)
  • 内部服务交互

查看 references/code-examples.md 获取模拟示例。

4. 快照测试

用途: UI 组件,API 响应,生成的代码

警告: 快照可能变得脆弱。用于稳定的组件,而不是快速变化的 UI。

5. 参数化测试

使用数据表测试多种场景。

查看 references/code-examples.md 获取参数化测试模式。


持续测试

1. CI/CD 集成

管道阶段:

# 示例:GitHub Actions
name: 测试管道

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: 安装依赖
        run: npm ci
      - name: 代码检查
        run: npm run lint
      - name: 类型检查
        run: npm run typecheck
      - name: 单元和集成测试
        run: npm test -- --coverage
      - name: 上传覆盖率
        uses: codecov/codecov-action@v3
      - name: E2E 测试
        run: npm run test:e2e
      - name: 性能测试(在主分支上)
        if: github.ref == 'refs/heads/main'
        run: npm run test:performance

2. 质量门

阻止合并/部署如果:

  • 代码覆盖率低于阈值(例如,80%)
  • 任何测试失败
  • 存在代码检查错误
  • 性能回归检测到(慢于 10%)
  • 发现安全漏洞

3. 测试执行策略

每次提交时:

  • 静态分析(代码检查,类型检查)
  • 单元测试
  • 快速集成测试(总计 < 5 分钟)

每次拉取请求时:

  • 所有测试(单元 + 集成 + E2E)
  • 覆盖率报告
  • 性能基准测试

部署到暂存环境时:

  • 完整的 E2E 套件
  • 负载测试
  • 安全扫描

部署到生产环境时:

  • 烟雾测试(仅关键路径)
  • 健康检查
  • 带监控的金丝雀部署

测试工具推荐

JavaScript/TypeScript

类别 工具 用例
单元/集成 Vitest 快速,Vite 原生,现代
单元/集成 Jest 成熟,广泛的生态系统
E2E Playwright 跨浏览器,可靠,快速
E2E Cypress 开发者友好,可视化调试
组件测试 测试库 用户中心,框架无关
API 测试 Supertest HTTP 断言,Express 集成
性能 k6 负载测试,可脚本化

Python

类别 工具 用例
单元/集成 pytest 功能强大,可扩展,fixtures
API 测试 httpx + pytest 异步支持,现代
E2E Playwright (Python) 浏览器自动化
性能 Locust 负载测试,基于 Python
模拟 unittest.mock 标准库,可靠

常见测试反模式

测试实现细节

// 坏:测试内部状态
expect(component.state.isLoading).toBe(false);

// 好:测试用户可见行为
expect(screen.queryByText('Loading...')).not.toBeInTheDocument();

测试与代码过于耦合

// 坏:测试在实现变化时中断
expect(userService.save).toHaveBeenCalledTimes(1);

// 好:测试行为,而不是实现
const user = await db.users.findOne({ email: 'test@example.com' });
expect(user).toBeTruthy();

不稳定的测试

// 坏:非确定性超时
await waitFor(() => {
  expect(screen.getByText('Success')).toBeInTheDocument();
}, { timeout: 1000 }); // 在慢速 CI 上可能失败

// 好:使用显式等待,更长的超时
await screen.findByText('Success', {}, { timeout: 5000 });

大型测试案例

// 坏:一个测试做太多
test('user workflow', async () => {
  // 100 行测试注册,登录,个人资料更新,注销...
});

// 好:专注的测试
test('user can sign up', async () => { /* ... */ });
test('user can login', async () => { /* ... */ });
test('user can update profile', async () => { /* ... */ });

与代理集成

代码质量审查员

  • 审查测试覆盖率报告
  • 建议缺失的测试用例
  • 验证测试质量和结构
  • 确保测试遵循此技能中的模式

后端系统架构师

  • 在设计服务时使用测试策略模板
  • 确保 API 可测试(依赖注入,清晰的接口)
  • 规划集成测试架构

前端 UI 开发人员

  • 应用组件测试模式
  • 使用测试库最佳实践
  • 实施 E2E 测试用户流程

AI/ML 工程师

  • 适应 ML 模型的测试模式(数据验证,模型性能测试)
  • 使用性能测试推理端点

快速开始清单

当开始一个新项目或功能时:

  • [ ] 定义覆盖率目标(总体,关键路径,新代码)
  • [ ] 选择测试框架(Jest/Vitest, Playwright 等)
  • [ ] 设置测试基础设施(测试数据库,固定装置,工厂)
  • [ ] 创建测试计划(见 templates/test-plan-template.md
  • [ ] 实施静态分析(ESLint, TypeScript)
  • [ ] 编写业务逻辑单元测试(80%+ 覆盖率)
  • [ ] 编写 API 端点集成测试(70%+ 覆盖率)
  • [ ] 编写关键用户旅程 E2E 测试(5-10 流程)
  • [ ] 配置 CI/CD 管道与质量门
  • [ ] 设置覆盖率报告(Codecov, Coveralls)
  • [ ] 在项目 README 中记录测试约定

查看详细的代码示例references/code-examples.md


技能版本:1.0.0 最后更新:2025-10-31 维护者:AI Agent Hub 团队