Files
novalon-website/README-TIERED-TESTING.md
T

295 lines
6.8 KiB
Markdown
Raw 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.
# 分层测试快速入门指南
## 什么是分层测试?
分层测试是一种测试策略,将测试按照执行时间和重要性分为三个层级:
- **快速层**:5分钟内完成,验证核心功能
- **标准层**:30分钟内完成,验证大部分功能
- **深度层**:可接受较长执行时间,进行全面验证
## 快速开始
### 1. 本地运行测试
#### 运行快速层测试(推荐日常开发使用)
```bash
npm run test:tier:fast
```
#### 运行标准层测试
```bash
npm run test:tier:standard
```
#### 运行深度层测试
```bash
npm run test:tier:deep
```
#### 运行所有层级测试
```bash
npm run test:tier:all
```
### 2. 编写分层测试
#### 快速层测试示例
```typescript
test.describe('API快速测试 @smoke @critical', () => {
test('应该能够获取内容列表', async ({ request }) => {
const response = await request.get('/api/admin/content');
expect(response.status()).toBe(200);
});
});
```
#### 标准层测试示例
```typescript
test.describe('管理后台功能测试 @admin @regression', () => {
test('应该能够创建新闻', async ({ page }) => {
await page.goto('/admin/news');
await page.click('[data-testid="create-news-btn"]');
await page.fill('[data-testid="news-title"]', '测试新闻');
await page.click('[data-testid="save-btn"]');
await expect(page.locator('[data-testid="success-message"]')).toBeVisible();
});
});
```
#### 深度层测试示例
```typescript
test.describe('首页视觉回归测试 @visual @regression', () => {
test('桌面端首页应该与基准一致', async ({ page }) => {
await page.setViewportSize({ width: 1280, height: 720 });
await page.goto('/');
await expect(page).toHaveScreenshot('homepage-desktop.png');
});
});
```
### 3. 使用测试标记
为测试添加标记以便分类和管理:
```typescript
test.describe('测试套件 @smoke @critical', () => {
test('测试用例 @api @regression', async ({ page }) => {
// 测试逻辑
});
});
```
**常用标记:**
- `@smoke` - 冒烟测试
- `@critical` - 关键测试
- `@regression` - 回归测试
- `@visual` - 视觉测试
- `@api` - API测试
- `@mobile` - 移动端测试
## CI/CD集成
项目已配置Woodpecker CI,自动执行分层测试:
### 分支策略
- **main分支**:执行所有层级测试
- **develop分支**:执行快速层和标准层测试
- **其他分支**:仅执行快速层测试
### 工作流程
1. 提交代码到分支
2. Woodpecker CI自动触发
3. 依次执行快速层、标准层、深度层测试
4. 前一层失败则停止后续执行
5. 生成测试报告并上传
6. 发送通知
## 性能优化
### 识别慢速测试
运行性能优化工具:
```bash
cd e2e && node test-optimizer-simple-test.js
```
工具会生成优化报告,包含:
- 慢速测试列表
- 优化建议
- 潜在时间节省
### 优化建议
1. **减少等待时间**
```typescript
// 不推荐
await page.waitForTimeout(5000);
// 推荐
await page.waitForSelector('[data-testid="result"]', { timeout: 5000 });
```
2. **使用data-testid选择器**
```typescript
// 不推荐
await page.click('div > div > button');
// 推荐
await page.click('[data-testid="submit-btn"]');
```
3. **拆分大测试**
```typescript
// 不推荐:单个大测试
test('完整的用户注册流程', async ({ page }) => {
// 100+ 行代码
});
// 推荐:拆分为多个小测试
test.describe('用户注册流程', () => {
test('应该能够填写注册表单', async ({ page }) => {
// 20 行代码
});
test('应该能够提交注册', async ({ page }) => {
// 20 行代码
});
});
```
## 监控和告警
### 测试执行历史
系统自动记录测试执行历史,存储在 `e2e/test-history.json`。
### 告警规则
系统会根据以下规则触发告警:
1. 测试通过率低于80% (Critical)
2. 测试通过率低于90% (High)
3. 测试执行时间超过30分钟 (Medium)
4. 失败测试数量超过10个 (High)
5. 深度层测试存在失败 (Critical)
### 查看告警
告警信息会输出到控制台,并保存在 `test-results/alerts.json`。
## 常见问题
### Q: 测试超时怎么办?
A: 检查以下几点:
1. 是否有不必要的等待时间
2. 选择器是否正确
3. 网络请求是否正常
4. 是否需要增加超时时间
### Q: 测试不稳定怎么办?
A: 采用以下策略:
1. 增加重试次数
2. 使用更稳定的等待策略
3. 检查是否有竞态条件
4. 使用data-testid选择器
### Q: 如何确定测试应该放在哪一层?
A: 根据执行时间和重要性:
- 执行时间<30秒且是关键功能 → 快速层
- 执行时间<60秒 → 标准层
- 执行时间>60秒或需要完整回归 → 深度层
### Q: 如何减少测试执行时间?
A: 采用以下策略:
1. 并行执行测试
2. 减少不必要的等待
3. 优化选择器
4. 拆分大测试
5. 使用mock数据
## 进阶使用
### 自定义测试层级
编辑 `e2e/src/config/test-tiers.ts`
```typescript
export const TEST_TIERS: Record<string, TestTierConfig> = {
fast: {
name: '快速层',
description: '冒烟测试、API测试、基础功能验证',
testMatch: /.*\.smoke\.spec\.ts$|.*\.api\.spec\.ts$/,
timeout: 30000,
retries: 1,
workers: process.env.CI ? 6 : '75%',
fullyParallel: true,
failFast: true,
},
// ... 其他层级
};
```
### 添加自定义告警规则
编辑 `e2e/src/utils/test-monitor.ts`
```typescript
this.alertRules.push({
name: 'custom-alert',
condition: (m) => m.failedTests > 5 && m.tier === 'fast',
severity: 'critical',
message: '快速层测试失败超过5个',
});
```
### 自定义优化规则
编辑 `e2e/src/utils/test-optimizer.ts`
```typescript
this.rules.push({
name: 'custom-rule',
condition: (p) => p.duration > 90000 && p.tier === 'standard',
suggestions: [
'标准层测试不应超过90秒',
'考虑拆分测试或优化执行流程',
],
});
```
## 文档资源
- [测试优化指南](./test-optimization-guide.md) - 详细的优化策略和技巧
- [分层测试最佳实践](./test-tiering-best-practices.md) - 完整的最佳实践指南
- [Playwright文档](https://playwright.dev/) - Playwright官方文档
- [Woodpecker CI文档](https://woodpecker-ci.org/docs/) - Woodpecker CI官方文档
## 获取帮助
如果遇到问题:
1. 查看文档资源
2. 检查测试日志
3. 运行性能优化工具
4. 联系团队成员
## 总结
分层测试系统通过以下方式提高测试效率:
1. **快速反馈**:快速层测试在5分钟内完成
2. **合理分配**:根据重要性分配测试资源
3. **持续优化**:通过历史数据持续优化
4. **自动化**CI/CD自动执行和报告
开始使用分层测试,提高测试效率,缩短反馈周期!