Files
2026-07-13 21:36:54 +08:00

276 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Google 测试标准参考手册
Google 测试最佳实践与标准的全面指南。
---
## AAA 模式(Arrange-Act-Assert
每个测试都应遵循以下结构:
### 1. 准备(Arrange
```markdown
**前置条件**
- 系统处于已知状态
- 测试数据已准备
- 依赖已模拟/配置
```
### 2. 执行(Act
```markdown
**测试步骤**
1. 执行操作
2. 触发行为
3. 运行操作
```
### 3. 断言(Assert
```markdown
**预期结果**
✅ 验证标准
✅ 可观察的结果
✅ 系统状态验证
```
---
## 测试用例设计原则
### 1. 测试用例 ID 命名规范
```
TC-[分类]-[编号]
示例:
- TC-CLI-001CLI 测试)
- TC-WEB-042Web 测试)
- TC-API-103API 测试)
- TC-SEC-007(安全测试)
```
### 2. 优先级分类
**P0(阻断级)**——发布前必须修复
- 阻碍核心功能
- 安全漏洞(SQL 注入、XSS
- 数据损坏/丢失
- 系统崩溃
**P1(严重级)**——两周内修复
- 主要功能故障(存在变通方案)
- 严重的用户体验下降
- 性能问题
**P2(高级)**——四周内修复
- 次要功能问题
- 边缘情况
- 非关键性缺陷
**P3(中级)**——条件允许时修复
- 外观问题
- 罕见的边缘情况
- 锦上添花的改进
**P4(低级)**——可选
- 文档拼写错误
- 轻微的 UI 对齐问题
### 3. 测试类型
**单元测试**
- 测试单个函数/方法
- 无外部依赖
- 执行速度快(<100ms
- 覆盖率:语句 ≥80%,分支 ≥75%
**集成测试**
- 测试组件间的交互
- 使用真实依赖(数据库、API
- 执行时间适中
- 覆盖率:关键用户路径
**端到端测试**
- 测试完整的用户工作流
- 使用真实浏览器/环境
- 执行速度慢
- 覆盖率:正常路径 + 关键故障场景
**安全测试**
- 覆盖 OWASP Top 10
- 输入验证
- 身份验证/授权
- 数据保护
---
## 覆盖率阈值
### 代码覆盖率目标
-**语句覆盖率**:≥80%
-**分支覆盖率**:≥75%
-**函数覆盖率**:≥85%
-**行覆盖率**:≥80%
### 测试分布(推荐)
- 单元测试:70%
- 集成测试:20%
- 端到端测试:10%
---
## 测试隔离
### 强制性原则
1. **不共享状态**
```typescript
❌ 错误:测试共享全局变量
✅ 正确:每个测试使用独立数据
```
2. **每个测试使用新数据**
```typescript
beforeEach(() => {
database.seed(freshData);
});
```
3. **测试后清理**
```typescript
afterEach(() => {
database.cleanup();
mockServer.reset();
});
```
---
## 快速失败验证
### 关键安全模式
```typescript
// ❌ 错误:回退到模拟数据
if (error) {
return getMockData(); // 错误——掩盖问题
}
// ✅ 正确:立即失败
if (error || !data) {
throw new Error(error?.message || '操作失败');
}
```
### 输入验证
```typescript
// 在任意操作之前进行验证
function processSkillName(input: string): void {
// 先做安全检查
if (input.includes('..')) {
throw new ValidationError('检测到路径遍历');
}
if (input.startsWith('/')) {
throw new ValidationError('不允许使用绝对路径');
}
// 再执行业务逻辑
return performOperation(input);
}
```
---
## 测试文档标准
### 测试用例模板
```markdown
### TC-XXX-YYY:描述性标题
**优先级**P0/P1/P2/P3/P4
**类型**:单元测试/集成测试/端到端测试/安全测试
**预计耗时**X 分钟
**前置条件**
- 具体、可验证的条件
**测试步骤**
1. 确切的命令或操作
2. 具体的输入数据
3. 验证步骤
**预期结果**
✅ 可衡量的结果
✅ 具体的验证标准
**通过/失败标准**
- ✅ 通过:所有验证步骤均成功
- ❌ 失败:出现任何错误或偏差
**潜在缺陷**
- 已知的边缘情况
- 安全隐患
```
---
## 质量门禁
### 发布标准
| 门禁项 | 阈值 | 是否阻断 |
|--------|------|----------|
| 测试执行 | 100% | 是 |
| 通过率 | ≥80% | 是 |
| P0 缺陷 | 0 | 是 |
| P1 缺陷 | ≤5 | 是 |
| 代码覆盖率 | ≥80% | 是 |
| 安全 | 90% OWASP | 是 |
### 每日检查点
**晨会**
- 昨日进展
- 今日计划
- 受阻事项
**下班前**
- 已执行的测试
- 通过率
- 已提交的缺陷
- 明日计划
### 周度审查
**周五报告**
- 本周总结
- 基线对比
- 质量门禁状态
- 下周计划
---
## 最佳实践总结
### 应做事项:
- ✅ 编写可重现的测试用例
- ✅ 每次测试后更新追踪记录
- ✅ 失败时立即提交缺陷
- ✅ 遵循 AAA 模式
- ✅ 保持测试隔离
- ✅ 记录环境详情
### 禁止事项:
- ❌ 跳过测试文档
- ❌ 批量更新 CSV
- ❌ 忽略安全测试
- ❌ 在生产数据上运行测试
- ❌ 跳过清理操作
- ❌ 硬编码测试数据
---
**参考资料**
- [Google 测试博客](https://testing.googleblog.com/)
- [Google SWE 书籍——测试篇](https://abseil.io/resources/swe-book)
- [测试金字塔概念](https://martinfowler.com/bliki/TestPyramid.html)