docs: 补充测试模板实战教训章节(从AI生成按钮bug中总结)

新增第六章「实战教训」:
- 「看见不等于测了」陷阱(B07案例分析)
- 弹窗测试的「红按钮」规则
- 「测试时绕过=上线时爆炸」警示
- 自我检查Checklist(3个问题)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Developer
2026-06-16 17:13:43 +08:00
parent ca76b74cdf
commit 214d8a4cb0
+77 -1
View File
@@ -204,7 +204,83 @@ Step 3: Healer 验证
---
## 六、常用通用方法
## 六、实战教训 —— 从 AI 生成按钮 bug 中学到的
### 6.1 「看见不等于测了」—— 最常见的测试陷阱
**案例**:题库管理的 AI 生成弹窗测试(B07):
```typescript
// ❌ 错误的写法:只检查了按钮可见就点取消了
test('AI生成弹窗交互', async ({ page }) => {
const genBtn = page.locator('button').filter({ hasText: /生成/ }).first();
await expect(genBtn).toBeVisible({ timeout: 3000 }); // ← 看见了
const cancelBtn = page.locator('button').filter({ hasText: /取消/ }).first();
await cancelBtn.click(); // ← 没点生成直接关闭
// 结果:没发现 knowledgeBaseContent 传了空字符串导致后端 400
});
```
**规则:每个「确认/提交/保存/生成」按钮必须至少被实际点击一次。**
### 6.2 弹窗/抽屉测试的「红按钮」规则
| 弹窗中的按钮 | 必须测? | 为什么 |
|:------------|:--------:|--------|
| **红按钮(提交/保存/生成/删除)** | **✅ 必须点** | 不点发现不了传参错误、校验失败、后端 500 |
| 灰按钮(取消/关闭/X) | 可选 | 主要测 UI 渲染 |
| 输入框/下拉 | ✅ 必须填 | 不填不知道表单绑定是否正确 |
### 6.3 「测试时绕过」= 「上线时爆炸」
我们当初故意绕过 AI 生成的点击,理由是「怕 AI 调用太慢」。结果是:
```
测试绕过 → 前端传空字符串 → 后端 400 → 用户报错
↑ 如果测试点了「生成」按钮,立即就能发现
```
**解决方案**
- UI 测试只验证**弹窗打开 + 参数已填充 + 按钮可点击**(不等待 AI 返回)
- API 测试单独覆盖**实际后端调用是否正确**(短 timeout)
- 两者结合既不卡 UI 测试,又不遗漏后端验证
```typescript
// ✅ 正确的做法:UI 测弹窗交互,API 测后端逻辑
// UI 测试
test('弹窗交互', async ({ page }) => {
await aiBtn.click();
await expect(genBtn).toBeVisible();
// 验证内容已填充(不是空的)
const countInput = page.locator('input[type="number"]');
await expect(countInput).toBeVisible();
// 点取消关闭,不等待 AI 返回
await cancelBtn.click();
});
// API 测试(单独)
test('API 调用验证', async () => {
const gen = await fetch(`/api/xxx/generate`, { body: JSON.stringify({ count: 1, content }) });
expect(gen.status).toBe(201);
});
```
### 6.4 Checklist 自我检查
写完测试后问自己三个问题:
```
□ 每个「提交/保存/生成/删除」按钮都被实际点击过吗?
→ 不只是检查 visible/enabled,是真正调用了 click()
□ 弹窗/抽屉关闭前,表单里的关键输入框都被填充验证过吗?
→ 不只是打开看了一眼
□ 被测试绕过的「太慢/太难测」路径,有没有 API 测试兜底?
→ UI 跳过的地方,API 必须补上
```
---
## 七、常用通用方法
```typescript
// 通用按钮点击