# 人才测评系统 — 自动化测试方案 ## 测试策略 ``` 分层测试 + 渐进覆盖:先测核心流程 → 再测边界异常 → 最后全回归 ``` --- ## 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/手动定期运行 ```