项目文件夹

文件
2026-07-13 21:36:54 +08:00

276 行
5.0 KiB
Markdown

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# 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)