Files
aurak/docs/tests/assessment-test-plan.md
T
Developer 3d41f0dfcb test: 端到端全流程测试 + 烟雾测试 + 测试方案文档
新增:
1. test-e2e-assessment-full-flow.mjs — 完整端到端流程
   登录→模板校验→题库校验→API考核→非技术模板→UI端到端
   覆盖7个阶段29项检查,全部通过

2. test-assessment-smoke.mjs — 快速烟雾测试(29项)

3. docs/tests/assessment-test-plan.md — 完整测试方案文档
   5个Phase: 核心流程/评分证书/权限隔离/压力异常/回归测试

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 10:51:09 +08:00

138 lines
5.5 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.
# 人才测评系统 — 自动化测试方案
## 测试策略
```
分层测试 + 渐进覆盖:先测核心流程 → 再测边界异常 → 最后全回归
```
---
## Phase 1: 核心考核流程(优先级 P0)
### 1.1 正常考核全流程
| # | 测试场景 | 步骤 | 预期结果 |
|---|---------|------|---------|
| 1.1.1 | 技术人员模板完整答题 | 登录 → 考核页 → 选模板 → 开始 → 答4题(MC+SA) → 提交 → 查看结果 | 全部题目可答,最终显示等级和分数 |
| 1.1.2 | 非技术人员模板完整答题 | 同上,选非技术模板 | 可正常完成 |
| 1.1.3 | 选择题答题 | 检测到选择题选项 → 选一个 → 确认答案 | 选项正确显示,确认成功 |
| 1.1.4 | 简答题答题 | 检测到 textarea → 输入文字 → 发送 | 文字发送成功 |
| 1.1.5 | AI 追问流程 | 简答提交后检测 textarea 是否重现 → 输入追问回答 | 追问正常触发,回答后继续 |
| 1.1.6 | 结果页验证 | 完成考核后检测页面 | 显示分数、等级、合格/不合格 |
### 1.2 考核模板配置
| # | 测试场景 | 步骤 | 预期结果 |
|---|---------|------|---------|
| 1.2.1 | 两个模板均可见 | 登录后进入考核页 | 技术人员模板 + 非技术人员模板都显示 |
| 1.2.2 | 题数指示器正确 | 出题后检查页面的题数指示 | 显示 "问题 1/4" 或 "问题 1/10" |
| 1.2.3 | 维度分布正确 | 启动考核后检查各维度题目数 | 技术人员: PROMPT/LLM/IDE/DEV_PATTERN各至少1题; 非技术: 无IDE/DEV_PATTERN |
### 1.3 P2 新功能验证
| # | 测试场景 | 步骤 | 预期结果 |
|---|---------|------|---------|
| 1.3.1 | 标记回头检查 | 答题中点击🏷️按钮 | 导航点变黄色 |
| 1.3.2 | 提交确认弹窗 | 答部分题后点提交 | 弹出确认弹窗 |
| 1.3.3 | 进度导航点 | 观察题号指示 | 当前题蓝色,其他灰色 |
---
## Phase 2: 评分与证书(优先级 P1)
### 2.1 评分正确性
| # | 测试场景 | 步骤 | 预期结果 |
|---|---------|------|---------|
| 2.1.1 | 考核完成有分数 | 走完完整考核 | finalScore ≠ undefined, 为 0-10 之间的数字 |
| 2.1.2 | 等级判定 | 检查结果页等级字段 | Proficient / Novice / Advanced / Expert |
| 2.1.3 | 合格/不合格判定 | 根据 passingScore 判断 | 分数≥及格线 → passed=true |
### 2.2 证书
| # | 测试场景 | 步骤 | 预期结果 |
|---|---------|------|---------|
| 2.2.1 | 查看证书 | 完成页点击"查看证书" | 弹窗显示等级、总分、维度得分 |
| 2.2.2 | 证书 API | GET /api/assessment/:id/certificate | 返回 certificate 对象 |
| 2.2.3 | 历史记录 | 完成考核后查看历史侧栏 | 新纪录出现在列表 |
### 2.3 导出
| # | 测试场景 | 步骤 | 预期结果 |
|---|---------|------|---------|
| 2.3.1 | PDF 导出 | 完成页下载 PDF | 触发文件下载或新窗口 |
| 2.3.2 | Excel 导出 | 完成页导出 | 触发文件下载 |
---
## Phase 3: 权限隔离(优先级 P1
### 3.1 角色级权限
| # | 测试场景 | 步骤 | 预期结果 |
|---|---------|------|---------|
| 3.1.1 | USER 查看考核页 | user1 登录 → 进入考核 | 能看到模板,能参加考核 |
| 3.1.2 | USER 不能管理模板 | user1 → 设置页 | 没有"测评模板" Tab |
| 3.1.3 | TA 管理模板 | ta_admin → 设置页 | 有"测评模板" Tab |
| 3.1.4 | TA 创建模板 | ta_admin API 调用 | POST /api/assessment/templates 成功 |
### 3.2 会话隔离
| # | 测试场景 | 步骤 | 预期结果 |
|---|---------|------|---------|
| 3.2.1 | 不可查看他人会话 | USER 查他人的 session/state | 404 或 Forbidden |
| 3.2.2 | 不可强制结束他人会话 | USER 调 force-end 他人 session | 403 或 404 |
---
## Phase 4: 压力与异常(优先级 P2)
### 4.1 并发
| # | 测试场景 | 步骤 | 预期结果 |
|---|---------|------|---------|
| 4.1.1 | 10人同时开启考核 | 并发 POST /assessment/start | Session ID 全部唯一 |
| 4.1.2 | 10人同时提交答案 | 并发 POST /assessment/:id/answer | 全部成功,无数据竞争 |
### 4.2 异常输入
| # | 测试场景 | 步骤 | 预期结果 |
|---|---------|------|---------|
| 4.2.1 | 空模板 ID 启动 | POST /assessment/start 不带 templateId | 400 Bad Request |
| 4.2.2 | 不存在的模板 ID | POST /assessment/start 用假 templateId | 400 或 404 |
| 4.2.3 | 不存在的 Session 答题 | POST /assessment/fake/answer | 404 |
| 4.2.4 | 用已完成的 Session 答题 | 完成后再次 POST answer | 400 或适当错误 |
### 4.3 状态冲突
| # | 测试场景 | 步骤 | 预期结果 |
|---|---------|------|---------|
| 4.3.1 | 重复开始考核(同一用户同一模板) | 连续2次 start | 第二次可能失败或开新会话 |
| 4.3.2 | 强制结束不存在的会话 | POST /assessment/fake/force-end | 404 |
---
## Phase 5: 完整回归测试(优先级 P2)
合并已有的 3 个测试脚本,确保不重复:
| 脚本 | 说明 | 是否纳入 |
|------|------|---------|
| test-systematic.mjs | 142 项系统测试 | ✅ 保留,不重复 |
| test-p2-advanced.mjs | P2 高级功能 20 项 | ✅ 合并入本方案的 Phase 1.3 |
| test-full-coverage.mjs | 全量回归 52 项 | ✅ 保留,不重复 |
| test-concurrent-assessments.mjs | 并发测试 | ✅ 合并入 Phase 4.1 |
---
## 实施计划
```
Step 1: 跑一轮快速烟雾测试 → 发现当前故障
Step 2: 修复 Phase 1 中的阻断性问题
Step 3: 编写自动化测试脚本(分阶段)
Step 4: 执行完整测试 → 修复剩余问题
Step 5: 纳入 CI/手动定期运行
```