全量用户侧功能测试矩阵
1. 环境基线
| 项目 | 2026-06-04 初始 | 2026-06-05 验证 |
|---|---|---|
| 日期 | 2026-06-04 | 2026-06-05 |
| server/ 分支 | main,clean | main,clean |
| web/ 分支 | main,clean | main,clean |
| docs/ 分支 | main,clean | main,clean |
| env/e2e.env | 存在 | 存在,含 8 个 E2E 变量 |
| 前端页面数 | 48 个 page.tsx | 45 个 page.tsx |
| 后端 Controller 数 | 34 个 | 33 个 |
| 现有 E2E spec | 12 个 | 12 个 |
| 后端 readiness | — | UP(db/goJudge/judgeQueue/minioStorage/redisEnhancement) |
| OpenAPI | — | 3.1.0,124 个 paths |
Playwright MCP 真实页面验证(2026-06-05)
| 角色 | 账号 | 跳转 URL | 侧边栏入口 | 数据状态 |
|---|---|---|---|---|
| 管理员 | U-SA1 | /admin | 治理概览、平台配置、组织架构、用户管理、学期管理、课程模板、开课管理、审计日志、权限解释(9 个) | 平台配置摘要已接入,治理模块全部接通 |
| 教师 | U-TA1 | /teacher | 教学概览、我的课程、作业管理、提交管理、成绩册、题库中心、实验中心、通知公告(8 个) | 19 个课程、26 个未读通知,已接通模块全部显示 |
| 学生 | U-ST1 | /student | 学习中心、我的课程、作业任务、实验项目、我的成绩、站内通知(6 个) | 当前无可见课程,需数据准备 |
console error: 仅 favicon.ico 404,无业务错误。
2. 功能覆盖矩阵
2.1 公共与认证
| # | 功能域 | 页面/API | 角色 | 必测操作 | 正向场景 | 失败/权限负例 | 数据准备 | Playwright MCP 验证方式 | 预期证据 | 覆盖状态 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 登录 | /login | 全部 | 账号密码登录 | 正确凭据登录成功 | 错误密码、空输入、禁用用户 | 已有管理员/教师/学生账号 | 输入凭据→点击登录→验证跳转 | URL/页面文案 | ⏳ |
| 2 | 首页重定向 | / | 全部 | 访问根路径 | 按角色跳转到对应首页 | 未登录跳转登录页 | 登录态 | 访问/→检查跳转目标 | URL | ⏳ |
| 3 | 退出登录 | 顶栏 | 全部 | 点击退出 | 退出后跳转登录页 | — | 登录态 | 点击退出→验证跳转 | URL | ⏳ |
| 4 | 权限不足 | /unauthorized | 全部 | 越权访问 | 显示权限不足提示 | — | — | 访问无权限页面→检查提示 | 页面文案 | ⏳ |
| 5 | 通知入口 | /me/notifications | 全部 | 按角色跳转 | 跳转到对应通知页 | — | 登录态 | 点击通知入口→验证跳转 | URL | ⏳ |
2.2 管理员功能
| # | 功能域 | 页面/API | 角色 | 必测操作 | 正向场景 | 失败/权限负例 | 数据准备 | Playwright MCP 验证方式 | 预期证据 | 覆盖状态 |
|---|---|---|---|---|---|---|---|---|---|---|
| 6 | 治理概览 | /admin | 管理员 | 打开页面 | 显示平台摘要和快捷入口 | 学生访问被拒 | — | 导航到/admin→检查内容 | 截图 | ⏳ |
| 7 | 平台配置 | /admin/platform-config | 管理员 | 修改平台名称 | 保存成功 | 空名称提交 | — | 修改名称→保存→刷新验证 | 页面文案 | ⏳ |
| 8 | 组织架构 | /admin/org-units | 管理员 | 创建学校/学院 | 树形展示 | 重复编码 | E2E-FULLRUN-前缀学校 | 创建节点→检查树 | DOM/截图 | ⏳ |
| 9 | 用户管理 | /admin/users | 管理员 | 创建用户 | 创建成功并显示 | 重复用户名 | E2E-FULLRUN-前缀用户 | 创建→搜索→查看详情 | 页面文案 | ⏳ |
| 10 | 用户详情 | /admin/users/[userId] | 管理员 | 查看/修改用户 | 信息展示正确 | 无效ID | 已有用户 | 导航到详情→检查字段 | 截图 | ⏳ |
| 11 | 学期管理 | /admin/academic-terms | 管理员 | 创建学期 | 创建成功 | 重叠学期 | E2E-FULLRUN-前缀学期 | 创建→检查列表 | 列表项 | ⏳ |
| 12 | 课程模板 | /admin/course-catalogs | 管理员 | 创建模板 | 创建成功 | 空表单 | E2E-FULLRUN-前缀模板 | 创建→检查列表 | 列表项 | ⏳ |
| 13 | 开课管理 | /admin/course-offerings | 管理员 | 创建开课 | 创建成功 | 无效关联 | 依赖学期+模板 | 创建→检查列表 | 列表项 | ⏳ |
| 14 | 开课详情 | /admin/course-offerings/[offeringId] | 管理员 | 查看详情 | 显示教学班和成员 | 无效ID | 已有开课 | 导航到详情→检查内容 | 截图 | ⏳ |
| 15 | 审计日志 | /admin/audit-logs | 管理员 | 筛选日志 | 结果展示正确 | 无效筛选条件 | 有操作记录 | 筛选→检查结果→复制requestId | 列表项 | ⏳ |
| 16 | 权限解释 | /admin/auth-explain | 管理员 | 创建授权组 | 授权组创建成功 | 允许/拒绝/错误输入 | — | 创建组→添加成员→测试查询 | 页面文案 | ⏳ |
2.3 教师功能
| # | 功能域 | 页面/API | 角色 | 必测操作 | 正向场景 | 失败/权限负例 | 数据准备 | Playwright MCP 验证方式 | 预期证据 | 覆盖状态 |
|---|---|---|---|---|---|---|---|---|---|---|
| 17 | 教学概览 | /teacher | 教师 | 打开页面 | 显示课程统计 | 学生访问被拒 | 有课程数据 | 导航到/teacher→检查内容 | 截图 | ⏳ |
| 18 | 我的课程 | /teacher/courses | 教师 | 查看列表 | 课程卡片显示 | 空态 | 已关联课程 | 导航→检查列表 | 列表项 | ⏳ |
| 19 | 课程详情 | /teacher/courses/[offeringId] | 教师 | 查看详情 | 详情正确 | 无权课程 | 已有开课 | 导航→检查内容 | 截图 | ⏳ |
| 20 | 教学班与成员 | /teacher/courses/[offeringId]/members | 教师 | 批量添加成员 | 添加成功 | 重复添加/CSV格式错误 | 已有开课+学生 | 添加→检查列表→CSV导入 | 列表项 | ⏳ |
| 21 | 公告管理 | /teacher/courses/[offeringId]/announcements | 教师 | 创建/编辑/发布 | 公告状态更新 | 空标题 | 已有开课 | 创建→编辑→发布→检查 | 列表项 | ⏳ |
| 22 | 资源管理 | /teacher/courses/[offeringId]/resources | 教师 | 上传/改名/下载/删除 | 文件操作成功 | 超大文件/空名 | 已有开课 | 上传→改名→下载→删除 | 文件名/下载 | ⏳ |
| 23 | 讨论管理 | /teacher/courses/[offeringId]/discussions | 教师 | 创建/回复/锁定 | 讨论状态更新 | 空内容 | 已有开课 | 创建→回复→锁定→检查 | 列表项 | ⏳ |
| 24 | 讨论详情 | /teacher/courses/[offeringId]/discussions/[discussionId] | 教师 | 查看/回复 | 回复显示 | 无效ID | 已有讨论 | 导航→回复→检查 | 回复列表 | ⏳ |
| 25 | 课程题库 | /teacher/courses/[offeringId]/question-bank | 教师 | 创建题目 | 五类题创建成功 | 空表单/非法分值 | 已有开课 | 创建各类题→检查列表 | 列表项 | ⏳ |
| 26 | 判题环境 | /teacher/courses/[offeringId]/judge-environments | 教师 | 创建/编辑/归档 | 环境管理成功 | 空表单 | 已有开课 | 创建→编辑→归档→检查 | 列表项 | ⏳ |
| 27 | 作业列表 | /teacher/assignments | 教师 | 查看/筛选 | 列表正确 | 空态 | 已有作业 | 导航→筛选→检查 | 列表项 | ⏳ |
| 28 | 创建作业 | /teacher/assignments/create | 教师 | 结构化创建 | 创建成功 | 无题目/无分值 | 题库已有题目 | 填写→配置→提交 | 页面跳转 | ⏳ |
| 29 | 编辑作业 | /teacher/assignments/[assignmentId]/edit | 教师 | 编辑/发布/关闭 | 状态变更 | 关闭后修改 | 已有作业 | 编辑→发布→检查状态 | 状态标签 | ⏳ |
| 30 | 跨课程题库 | /teacher/question-bank | 教师 | 查看跨课程题目 | 列表正确 | — | 多课程题目 | 导航→检查列表 | 列表项 | ⏳ |
| 31 | 提交列表 | /teacher/submissions | 教师 | 查看/筛选 | 列表正确 | 空态 | 已有提交 | 导航→筛选→检查 | 列表项 | ⏳ |
| 32 | 提交详情 | /teacher/submissions/[submissionId] | 教师 | 查看/评分/重判 | 详情和评测报告 | 无效ID | 已有提交 | 导航→查看→评分→重判 | 截图 | ⏳ |
| 33 | 成绩册 | /teacher/grading/gradebook | 教师 | 查询/导出/批量调整/导入/发布 | 成绩操作成功 | 格式错误导入 | 已有成绩数据 | 查询→导出→批量调整→导入→发布 | 文件/状态 | ⏳ |
| 34 | 实验管理 | /teacher/labs | 教师 | 创建/编辑/发布/关闭/评阅 | 实验生命周期 | 空表单 | 已有开课 | 创建→发布→评阅→检查 | 列表项 | ⏳ |
| 35 | 教师通知 | /teacher/notifications | 教师 | 查看/已读/全部已读 | 通知状态更新 | — | 有通知 | 查看→标记已读→检查 | 未读数 | ⏳ |
2.4 学生功能
| # | 功能域 | 页面/API | 角色 | 必测操作 | 正向场景 | 失败/权限负例 | 数据准备 | Playwright MCP 验证方式 | 预期证据 | 覆盖状态 |
|---|---|---|---|---|---|---|---|---|---|---|
| 36 | 学习中心 | /student | 学生 | 打开页面 | 显示课程统计和任务提醒 | 教师访问被拒 | 有课程数据 | 导航到/student→检查内容 | 截图 | ⏳ |
| 37 | 我的课程 | /student/courses | 学生 | 查看列表 | 课程显示 | 空态 | 已选课 | 导航→检查列表 | 列表项 | ⏳ |
| 38 | 课程内容 | /student/courses/[classId] | 学生 | 查看公告/资源/讨论 | 内容显示正确 | 访问其他班级 | 已选课 | 导航→检查各tab | 截图 | ⏳ |
| 39 | 学生讨论详情 | /student/courses/[classId]/discussions/[discussionId] | 学生 | 查看/回复 | 回复成功 | 锁定讨论回复 | 已有讨论 | 导航→回复→检查 | 回复列表 | ⏳ |
| 40 | 作业列表 | /student/assignments | 学生 | 查看列表 | 任务显示正确 | 空态 | 已发布作业 | 导航→检查列表 | 列表项 | ⏳ |
| 41 | 作业详情 | /student/assignments/[assignmentId] | 学生 | 答题/提交 | 提交成功 | 超截止时间/非法文件 | 已发布作业 | 导航→答题→提交→检查历史 | 提交记录 | ⏳ |
| 42 | 编程工作区 | /student/assignments/[assignmentId]/workspace/[questionId] | 学生 | 编辑/运行/提交 | 代码操作成功 | 语法错误运行 | 已有编程题 | 打开→编辑→保存→运行→提交 | 代码/结果 | ⏳ |
| 43 | 提交详情 | /student/submissions/[submissionId] | 学生 | 查看详情 | 评测结果显示 | 无效ID | 已有提交 | 导航→检查详情 | 截图 | ⏳ |
| 44 | 我的成绩 | /student/grades | 学生 | 查看/导出 | 成绩显示正确 | — | 已发布成绩 | 导航→检查→导出 | 成绩/文件 | ⏳ |
| 45 | 实验列表 | /student/labs | 学生 | 查看/上传附件/提交报告 | 实验操作成功 | 空报告提交 | 已发布实验 | 导航→上传→提交→检查 | 状态 | ⏳ |
| 46 | 学生通知 | /student/notifications | 学生 | 查看/已读/全部已读 | 通知状态更新 | — | 有通知 | 查看→标记已读→检查 | 未读数 | ⏳ |
2.5 响应式与移动端
| # | 测试项 | 页面 | 验证方式 | 预期证据 | 覆盖状态 |
|---|---|---|---|---|---|
| 47 | 登录页移动端 | /login | 设置375px视口→操作 | 截图 | ⏳ |
| 48 | 管理员侧边栏移动端 | /admin | 设置375px视口→检查导航 | 截图 | ⏳ |
| 49 | 教师侧边栏移动端 | /teacher | 设置375px视口→检查导航 | 截图 | ⏳ |
| 50 | 学生侧边栏移动端 | /student | 设置375px视口→检查导航 | 截图 | ⏳ |
2.6 负例与权限边界
| # | 测试项 | 场景 | 预期结果 | 验证方式 | 覆盖状态 |
|---|---|---|---|---|---|
| 51 | 错误登录 | 错误密码 | 提示错误 | 页面文案 | ⏳ |
| 52 | 禁用用户登录 | 禁用账号 | 提示禁用 | 页面文案 | ⏳ |
| 53 | 学生访问管理员页 | 学生访问/admin | 跳转unauthorized | URL | ⏳ |
| 54 | 学生访问其他班级 | 学生访问其他classId | 403或空 | 页面状态 | ⏳ |
| 55 | 教师访问无授权课程 | 教师访问未关联offeringId | 403或空 | 页面状态 | ⏳ |
| 56 | 未登录访问受保护API | 无token请求/api/v1/* | 401 | 网络响应 | ⏳ |
| 57 | 作业关闭后提交 | 关闭作业后尝试提交 | 提示已关闭 | 页面文案 | ⏳ |
| 58 | 讨论锁定后回复 | 锁定讨论后学生回复 | 提示已锁定 | 页面文案 | ⏳ |
3. 主链路测试矩阵
| # | 链路名称 | 步骤 | 涉及角色 | 覆盖状态 |
|---|---|---|---|---|
| ML-1 | 平台初始化 | 管理员创建组织→用户→学期→模板→开课 | 管理员 | ⏳ |
| ML-2 | 教学准备 | 教师创建教学班→添加成员→上传资源→发布公告→创建讨论 | 教师 | ⏳ |
| ML-3 | 题库与作业 | 教师创建题库题目→创建判题环境→创建作业→配置试卷→发布 | 教师 | ⏳ |
| ML-4 | 学生答题 | 学生查看作业→工作区编辑→保存→运行→正式提交 | 学生 | ⏳ |
| ML-5 | 评测与批改 | 系统评测→教师查看提交→评分→重判→发布成绩 | 教师/系统 | ⏳ |
| ML-6 | 成绩查看 | 学生查看提交结果→成绩→导出 | 学生 | ⏳ |
| ML-7 | 实验流程 | 教师创建实验→学生提交报告→教师评阅→发布 | 教师/学生 | ⏳ |
| ML-8 | 通知流转 | 系统发通知→用户查看→标记已读 | 全部 | ⏳ |
| ML-9 | 审计与权限 | 管理员查看审计日志→权限解释 | 管理员 | ⏳ |
4. 数据准备策略
统一前缀:E2E-FULLRUN-20260604-*
| 数据类型 | 准备方式 | 关键字段 | 清理方式 |
|---|---|---|---|
| 组织(学校/学院/课程/班级) | 管理员UI或API | name, code, type | 数据库DELETE |
| 用户(管理员/教师/助教/学生/禁用) | 管理员UI或API | username, role, status | 数据库DELETE |
| 学期 | 管理员UI | name, startDate, endDate | 数据库DELETE |
| 课程模板 | 管理员UI | name, code | 数据库DELETE |
| 开课 | 管理员UI | offeringId, termId, catalogId | 数据库DELETE |
| 教学班 | 教师UI | className, offeringId | 数据库DELETE |
| 课程成员 | 教师UI批量添加 | userId, classId | 数据库DELETE |
| 公告 | 教师UI | title, content | API删除 |
| 资源 | 教师UI上传 | fileName, size | API删除 |
| 讨论 | 教师/学生UI | title, content | 数据库DELETE |
| 题库(五类) | 教师UI | type, content, score | 数据库DELETE |
| 判题环境 | 教师UI | name, language | 数据库DELETE |
| 作业 | 教师UI | title, deadline, paper | 数据库DELETE |
| 提交 | 学生UI | assignmentId, answers | 数据库DELETE |
| 编程工作区 | 学生UI | questionId, files | 数据库DELETE |
| 实验 | 教师UI | title, description | 数据库DELETE |
| 实验报告 | 学生UI | labId, content | 数据库DELETE |
| 通知 | 系统生成 | type, content | 数据库DELETE |