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

4.6 KiB
Raw Permalink Blame History

问卷/考试系统 - 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),但 SubjectSelectionPageUserTaskPage 使用 zustanduseUserStore 且未从 localStorage 恢复,导致 user?.id 可能为空,后续生成试卷/拉取任务会失败(见 src/pages/HomePage.tsx:18src/stores/userStore.ts:16src/pages/SubjectSelectionPage.tsx:38src/pages/UserTaskPage.tsx:28)。
  • API 响应对象使用方式不一致:src/utils/request.ts 的响应拦截器会直接返回 { success, data },但 SubjectSelectionPageUserTaskPage 仍按 axios 原始响应访问 response.data.success,会导致列表不渲染(见 src/utils/request.ts:14src/pages/SubjectSelectionPage.tsx:55src/pages/UserTaskPage.tsx:39)。
  • 考试页初始化逻辑可能清空题目:QuizPage 在设置题目后调用 clearQuiz(),而 clearQuiz() 会清空 questions,可能导致考试页无题可答(见 src/pages/QuizPage.tsx:51src/contexts/QuizContext.tsx:38)。

P1管理端配置入口可达性问题

  • 存在 /admin/config 路由,但侧边栏菜单未提供入口,用户只能手工输入 URL 访问(见 src/App.tsx:58src/layouts/AdminLayout.tsx:29)。

P1鉴权/敏感信息呈现风险(影响上线)

  • adminAuth 为简化放行逻辑,接口层面的“权限控制”在生产环境不成立(见 api/middlewares/index.tsadminAuth 实现)。
  • 用户密码存在明文存储/展示路径(例如用户管理页面有显示/隐藏密码的 UI属于上线前必须整改的安全项src/pages/admin/UserManagePage.tsx:36)。

P2一致性与可维护性问题影响后续扩展

  • 同一功能域存在两套请求封装(src/services/api.tssrc/utils/request.ts)且返回值约定不同,容易造成新页面复用错误(已在用户端出现)。
  • 测试脚本与端口配置不一致:test/*.js 默认指向 http://localhost:3000/api,与当前后端默认端口 3001 不一致,直接运行会误判失败(见 test/test_openspec_features.js:3)。

建议完善(按收益排序)

  • 统一用户态管理:用户端统一使用 UserContext 或统一使用 zustand,并保证从 localStorage 恢复与退出清理一致。
  • 统一请求封装与返回类型:优先减少到一个请求层(或保证两者对外返回形态一致),避免页面端误用。
  • 修复考试页初始化顺序:确保“清理旧状态”发生在“写入新题目”之前,或仅清理 answers 不清理 questions
  • 管理端补齐菜单入口:为 /admin/config 提供侧边栏入口,避免功能“存在但不可见”。
  • 用户组做专项回归:覆盖“全体用户”系统组约束、成员增删、任务按组分派、混合选择去重、报表导出。

建议回归用例清单(手工)

  • 用户端:新用户登录→进入科目页→选择科目→开始考试→答题提交→结果页展示→返回首页→查看我的任务
  • 管理端:登录→题库(导入/新增/编辑/删除/导出)→类别管理→科目配置→任务创建(选用户+选用户组混合)→查看任务报表→用户管理(分组)→备份导出/恢复