关于 testing-strategy-builder
Testing Strategy Builder 是为软件团队提供测试策略规划指导的 skill,适用于新项目制定方案或改进现有测试。它涵盖测试类型、风险优先级、覆盖率、自动化及持续测试,并附带示例、模板和清单。
主要功能
- 01规划测试策略与测试计划
- 02按风险安排测试优先级
- 03涵盖单元、集成与端到端测试
- 04提供覆盖率建议与质量门禁
- 05附带示例、模板和检查清单
适用场景
- 01为新项目设计测试方案
- 02提升现有代码库的测试覆盖
- 03规划 CI/CD 持续测试流程
- 04为关键业务路径制定测试用例
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ariegoldkin/ ai-agent-hub --skill testing-strategy-builder安装后在 Claude Code 中输入/testing-strategy-builder确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
checklists/test-coverage-checklist.mdreferences/code-examples.mdtemplates/test-case-template.mdtest-plan-template.md详细介绍
测试策略构建器
概述
此技能为构建有效的测试策略提供全面指导,帮助确保软件的质量、可靠性和可维护性。无论是从头开始,还是改进现有测试覆盖率,此框架都能帮助团队设计稳健的测试方案。
适用场景:
- 为新项目或新功能规划测试策略
- 提高现有代码库的测试覆盖率
- 建立质量门禁和覆盖率目标
- 设计测试自动化架构
- 创建测试计划和测试用例
- 选择合适的测试工具和框架
- 在 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
- 安装(macOS):
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
# Coverage
c8 --version
nyc --version
注意: 此技能会根据你的项目框架(React、Vue、FastAPI、Django 等)和测试需求,引导你选择合适的工具。
测试理念
测试奖杯 🏆
现代测试遵循“测试奖杯”模型(由测试金字塔演进而来):
🏆
/ \
/ E2E \ ← Few (critical user journeys)
/----------\
/ Integration\ ← Many (component interactions)
/--------------\
/ Unit \ ← Most (business logic)
/------------------\
/ Static Analysis \ ← Foundation (linting, type checking)
原则:
- 静态分析:在运行时之前发现语法错误、类型问题和常见缺陷
- 单元测试:单独测试各个函数和组件
- 集成测试:测试组件如何协同工作
- 端到端(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。
集成测试
目的:测试组件之间的交互 **工具:**Testing Library、Supertest、配合 fixtures 使用的 pytest 特点:
- 测试多个单元协同工作
- 可使用测试数据库或模拟的外部服务
- 执行时间适中(每项测试 < 1s)
- 关注接口和契约
**覆盖率目标:**API 端点和组件交互达到 70% 以上
API 集成测试示例请参阅 references/code-examples.md。
端到端(E2E)测试
目的:验证关键用户流程 **工具:**Playwright、Cypress、Selenium 特点:
- 测试完整的应用流程(前端 + 后端 + 数据库)
- 执行速度慢(每项测试 5-30s)
- 在接近生产环境的环境中运行
- 关注业务关键路径
**覆盖率目标:**覆盖 5-10 个关键用户流程
完整的 E2E 测试示例请参阅 references/code-examples.md。
性能测试
目的:验证系统在负载下的性能 **工具:**k6、Artillery、JMeter、Locust 类型:
- 负载测试:系统在预期负载下的行为
- 压力测试:确定系统崩溃点
- 峰值测试:应对突发流量激增
- 耐久测试:随时间持续承受负载(内存泄漏)
**覆盖率目标:**测试所有性能关键端点
k6 负载测试示例请参阅 references/code-examples.md。
测试规划
1. 基于风险的测试
根据风险评估确定测试优先级:
高风险(要求 100% 覆盖率):
- 支付处理
- 身份验证和授权
- 数据变更(创建、更新、删除)
- 安全关键操作
- 合规相关功能
中风险(80% 覆盖率):
- 业务逻辑
- 数据转换
- API 集成
- 电子邮件/通知系统
低风险(50% 覆盖率):
- UI 样式
- 静态内容
- 只读操作
- 非关键功能
2. 测试用例设计
Given-When-Then 模式:
Given [initial context]
When [action occurs]
Then [expected outcome]
此模式有助于让测试清晰且重点突出。实现示例请参阅 references/code-examples.md。
3. 测试数据管理
策略:
- Fixtures:存放在 JSON/YAML 文件中的预定义测试数据
- Factories:以编程方式生成测试数据
- Seeders:使用已知数据填充测试数据库
- Faker 库:生成逼真的随机数据
测试工厂和 fixture 示例请参阅 references/code-examples.md。
测试模式与最佳实践
1. AAA 模式(Arrange-Act-Assert)
将测试分为三个清晰的阶段:
- Arrange:准备测试数据和上下文
- Act:执行要测试的操作
- Assert:验证预期结果
AAA 模式的详细示例请参阅 references/code-examples.md。
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 集成
流水线阶段:
# Example: GitHub Actions
name: Test Pipeline
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: npm ci
- name: Lint
run: npm run lint
- name: Type check
run: npm run typecheck
- name: Unit & Integration Tests
run: npm test -- --coverage
- name: Upload coverage
uses: codecov/codecov-action@v3
- name: E2E Tests
run: npm run test:e2e
- name: Performance Tests (on main branch)
if: github.ref == 'refs/heads/main'
run: npm run test:performance
2. 质量门禁
出现以下情况时阻止合并/部署:
- 代码覆盖率低于阈值(例如,80%)
- 任何测试失败
- 存在 Lint 错误
- 检测到性能回归(慢了 > 10%)
- 发现安全漏洞
3. 测试执行策略
每次提交时:
- 静态分析(Lint、类型检查)
- 单元测试
- 快速集成测试(总计 < 5 分钟)
拉取请求时:
- 所有测试(单元测试 + 集成测试 + E2E)
- 覆盖率报告
- 性能基准测试
部署到预发布环境时:
- 完整的 E2E 测试套件
- 负载测试
- 安全扫描
部署到生产环境时:
- 冒烟测试(仅关键路径)
- 健康检查
- 启用监控的金丝雀部署
测试工具推荐
JavaScript/TypeScript
| 类别 | 工具 | 用途 |
|---|---|---|
| 单元测试/集成测试 | Vitest | 快速、原生支持 Vite、现代化 |
| 单元测试/集成测试 | Jest | 成熟、生态系统丰富 |
| E2E | Playwright | 跨浏览器、可靠、快速 |
| E2E | Cypress | 对开发者友好、可视化调试 |
| 组件测试 | Testing Library | 以用户为中心、与框架无关 |
| API 测试 | Supertest | HTTP 断言、与 Express 集成 |
| 性能测试 | k6 | 负载测试、可编写脚本 |
Python
| 类别 | 工具 | 用途 |
|---|---|---|
| 单元测试/集成测试 | pytest | 功能强大、可扩展、支持 fixtures |
| API 测试 | httpx + pytest | 支持异步、现代化 |
| E2E | Playwright (Python) | 浏览器自动化 |
| 性能测试 | Locust | 负载测试、基于 Python |
| 模拟 | unittest.mock | 标准库、可靠 |
常见测试反模式
❌ 测试实现细节
// Bad: Testing internal state
expect(component.state.isLoading).toBe(false);
// Good: Testing user-visible behavior
expect(screen.queryByText('Loading...')).not.toBeInTheDocument();
❌ 测试与代码耦合过紧
// Bad: Test breaks when implementation changes
expect(userService.save).toHaveBeenCalledTimes(1);
// Good: Test behavior, not implementation
const user = await db.users.findOne({ email: '[email protected]' });
expect(user).toBeTruthy();
❌ 不稳定的测试
// Bad: Non-deterministic timeout
await waitFor(() => {
expect(screen.getByText('Success')).toBeInTheDocument();
}, { timeout: 1000 }); // Might fail on slow CI
// Good: Use explicit waits with longer timeout
await screen.findByText('Success', {}, { timeout: 5000 });
❌ 庞大的测试用例
// Bad: One test does too much
test('user workflow', async () => {
// 100 lines testing signup, login, profile update, logout...
});
// Good: Focused tests
test('user can sign up', async () => { /* ... */ });
test('user can login', async () => { /* ... */ });
test('user can update profile', async () => { /* ... */ });
与 Agent 的集成
代码质量审查员
- 审查测试覆盖率报告
- 建议补充缺失的测试用例
- 验证测试质量和结构
- 确保测试遵循此技能中的模式
后端系统架构师
- 设计服务时使用测试策略模板
- 确保 API 易于测试(依赖注入、清晰的接口)
- 规划集成测试架构
前端 UI 开发者
- 应用组件测试模式
- 遵循 Testing Library 最佳实践
- 为用户流程编写 E2E 测试
AI/ML 工程师
- 针对 ML 模型调整测试模式(数据验证、模型性能测试)
- 对推理端点使用性能测试
快速入门检查清单
开始新项目或新功能时:
- 定义覆盖率目标(整体、关键路径、新代码)
- 选择测试框架(Jest/Vitest、Playwright 等)
- 搭建测试基础设施(测试数据库、fixtures、工厂)
- 创建测试计划(参见
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 团队