Files
Web_BLV_OA_Exam_Prod/测试报告.md
2025-12-22 18:29:23 +08:00

51 lines
4.6 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.
# 问卷/考试系统 - UI 功能测试报告
## 测试范围
- 用户端:`/``/subjects``/tasks``/quiz``/result/:id`
- 管理端:`/admin/login``/admin/dashboard``/admin/questions``/admin/categories``/admin/subjects``/admin/tasks``/admin/users`(含用户组管理)、`/admin/statistics``/admin/backup``/admin/config`
- 说明:用户组功能(用户组管理、成员关系、考试任务按组分派与混合选择)已实现但目前标记为“未测试”。
## 测试环境
- 操作系统Windows
- 前端开发地址:`http://localhost:5173/`
- 后端开发地址:`http://localhost:3001/api`
- 测试时间2025-12-22
## 测试方法
- 静态代码审查:对页面路由、接口调用、关键交互与边界条件进行逐页核对
- 冒烟检查:启动开发服务后,验证前后端可启动、接口可访问(以实际执行记录为准)
## 结果概览
- 管理端:页面路由与菜单整体完整,但存在少量可达性与安全性问题
- 用户端:存在多处关键交互链路断裂风险(会导致“无法加载科目/任务/无法开始考试/考试页空白”)
- 用户组:实现已落地但缺少覆盖性验证与审计日志能力,需单独做回归测试
## 关键缺陷(建议优先级从高到低)
### P0用户端关键流程可能不可用
- 用户信息状态来源不一致:`HomePage` 使用 `UserContext` 写入 `localStorage(survey_user)`,但 `SubjectSelectionPage``UserTaskPage` 使用 `zustand``useUserStore` 且未从 `localStorage` 恢复,导致 `user?.id` 可能为空,后续生成试卷/拉取任务会失败(见 `src/pages/HomePage.tsx:18``src/stores/userStore.ts:16``src/pages/SubjectSelectionPage.tsx:38``src/pages/UserTaskPage.tsx:28`)。
- API 响应对象使用方式不一致:`src/utils/request.ts` 的响应拦截器会直接返回 `{ success, data }`,但 `SubjectSelectionPage``UserTaskPage` 仍按 `axios` 原始响应访问 `response.data.success`,会导致列表不渲染(见 `src/utils/request.ts:14``src/pages/SubjectSelectionPage.tsx:55``src/pages/UserTaskPage.tsx:39`)。
- 考试页初始化逻辑可能清空题目:`QuizPage` 在设置题目后调用 `clearQuiz()`,而 `clearQuiz()` 会清空 `questions`,可能导致考试页无题可答(见 `src/pages/QuizPage.tsx:51``src/contexts/QuizContext.tsx:38`)。
### P1管理端配置入口可达性问题
- 存在 `/admin/config` 路由,但侧边栏菜单未提供入口,用户只能手工输入 URL 访问(见 `src/App.tsx:58``src/layouts/AdminLayout.tsx:29`)。
### P1鉴权/敏感信息呈现风险(影响上线)
- `adminAuth` 为简化放行逻辑,接口层面的“权限控制”在生产环境不成立(见 `api/middlewares/index.ts``adminAuth` 实现)。
- 用户密码存在明文存储/展示路径(例如用户管理页面有显示/隐藏密码的 UI属于上线前必须整改的安全项`src/pages/admin/UserManagePage.tsx:36`)。
### P2一致性与可维护性问题影响后续扩展
- 同一功能域存在两套请求封装(`src/services/api.ts``src/utils/request.ts`)且返回值约定不同,容易造成新页面复用错误(已在用户端出现)。
- 测试脚本与端口配置不一致:`test/*.js` 默认指向 `http://localhost:3000/api`,与当前后端默认端口 `3001` 不一致,直接运行会误判失败(见 `test/test_openspec_features.js:3`)。
## 建议完善(按收益排序)
- 统一用户态管理:用户端统一使用 `UserContext` 或统一使用 `zustand`,并保证从 `localStorage` 恢复与退出清理一致。
- 统一请求封装与返回类型:优先减少到一个请求层(或保证两者对外返回形态一致),避免页面端误用。
- 修复考试页初始化顺序:确保“清理旧状态”发生在“写入新题目”之前,或仅清理 `answers` 不清理 `questions`
- 管理端补齐菜单入口:为 `/admin/config` 提供侧边栏入口,避免功能“存在但不可见”。
- 用户组做专项回归:覆盖“全体用户”系统组约束、成员增删、任务按组分派、混合选择去重、报表导出。
## 建议回归用例清单(手工)
- 用户端:新用户登录→进入科目页→选择科目→开始考试→答题提交→结果页展示→返回首页→查看我的任务
- 管理端:登录→题库(导入/新增/编辑/删除/导出)→类别管理→科目配置→任务创建(选用户+选用户组混合)→查看任务报表→用户管理(分组)→备份导出/恢复