Skip to content

按钮级 E2E 验证报告

更新日期:2026-05-16

1. 测试环境

项目实际值
前端Next.js dev server,http://127.0.0.1:3000
后端Spring Boot,http://127.0.0.1:18080
依赖Docker compose 启动 PostgreSQL、RabbitMQ、MinIO、Redis、go-judge
前端代理AUBB_SERVER_ORIGIN=http://127.0.0.1:18080
浏览器Playwright Chromium
数据策略新增数据统一使用 E2E-* 前缀;可清理则清理,不可清理则记录残留
敏感信息只记录环境变量名,不记录密码、token、cookie、JWT、私钥或真实连接串

2. Full Suites 结果

Suite用例数覆盖范围本轮结果
full-admin.spec.ts5认证、平台配置、组织、用户、CSV 导入、学期、课程模板、开课、审计、权限解释通过
full-course.spec.ts5教学班、成员、课程资源、讨论、题库、判题环境通过
full-assignment-judge.spec.ts3作业生命周期、结构化提交、附件、编程工作区、样例运行、正式判题、教师评分和重判通过
full-grading-lab-notification.spec.ts3成绩册、实验生命周期、报告附件、评阅、通知已读、SSE通过
full-navigation-permission.spec.ts3三角色导航、快捷入口、顶栏搜索、用户菜单、路由守卫、401/403、响应式通过

补充 smoke specs 保留原登录、治理、课程、作业、成绩实验通知页面冒烟覆盖。Task 10 已用 AUBB_E2E_REAL_BACKEND=1 npm run test:e2e 重新跑全部 E2E,最终 36 passed

3. GAP 覆盖矩阵

GAP状态证据摘要
GAP-AUTH-01已真实验证refresh、revoke、无 token 401、管理员撤销会话后旧 token 失效
GAP-ADMIN-01已修复后验证平台配置保存、重载、恢复原值;后端 nullable 字段更新策略已修复
GAP-ADMIN-02部分验证子组织创建并出现在树中;根 SCHOOL 创建受后端唯一根策略限制;无删除 API
GAP-ADMIN-03GAP-ADMIN-04GAP-ADMIN-05已真实验证用户创建、搜索、详情、身份/profile/组织关系、禁用启用、撤销会话、CSV 成功/失败行
GAP-ADMIN-06GAP-ADMIN-07GAP-ADMIN-08GAP-ADMIN-09GAP-ADMIN-10已真实验证学期、课程模板、开课、审计日志、权限解释允许/拒绝/错误输入
GAP-COURSE-01GAP-COURSE-02已真实验证教学班、功能开关、批量成员、CSV 导入、禁用恢复、转班
GAP-COURSE-03GAP-DOWNLOAD-01已真实验证教师资源上传/改名/下载/删除,学生侧下载同一资源
GAP-COURSE-04已真实验证教师发帖/回复、学生回复、锁定后学生回复被拒绝、解锁
GAP-COURSE-05已真实验证单选、多选、简答、文件、编程题创建、筛选、编辑、归档
GAP-COURSE-06已真实验证判题环境创建、编辑、归档
GAP-ASSIGN-01GAP-ASSIGN-02已真实验证创建结构化作业、编辑、替换试卷、发布、学生可见、关闭后提交被拒绝
GAP-ASSIGN-03GAP-ASSIGN-04已真实验证选择/简答/文件/编程提交、提交历史、详情、附件下载
GAP-ASSIGN-05GAP-ASSIGN-06GAP-ASSIGN-07已真实验证工作区文件操作、修订、恢复、重置、样例运行、正式判题、报告下载、教师评分和重判
GAP-GRADE-01GAP-GRADE-02GAP-GRADE-03已真实验证成绩册查询、报告、导出、人工评分、批量调整、模板下载、CSV 导入、发布、学生查询导出
GAP-LAB-01GAP-LAB-02GAP-LAB-03已真实验证实验创建/编辑/发布/关闭,学生附件和报告,教师评阅发布
GAP-NOTIF-01GAP-NOTIF-02已真实验证通知列表、未读数、单条已读、全部已读,SSE connectednotification
GAP-NAV-01已真实验证三角色侧边栏、概览快捷入口、顶栏搜索、用户菜单、越权页面/API
GAP-RESP-01已真实验证管理、教师、学生关键页桌面和移动视口主操作可见可点击

4. 按钮/操作矩阵

编号角色页面/API操作实际验证
BTN-001未登录/login错误登录、正确登录三角色登录落点、失败提示、退出登录由 smoke 覆盖
BTN-002管理员/api/v1/auth/*refresh、revoke、me、会话撤销full-admin 验证旧会话失效和无 token 401
BTN-003管理员/admin/platform-config保存配置读取、保存、重载、恢复原值
BTN-004管理员/admin/org-units创建组织子组织创建并在树中可查;根创建按后端策略拒绝
BTN-005管理员/admin/users新增用户、搜索、批量导入创建用户、搜索命中、CSV 一成功一失败、导入用户可查
BTN-006管理员/admin/users/[userId]身份、profile、组织关系、状态、撤销会话全部 API 写入后验证;禁用用户登录返回 ACCOUNT_DISABLED
BTN-007管理员学期/课程模板/开课创建、筛选、编辑、进入详情三类治理对象均完成闭环
BTN-008管理员审计/权限解释筛选、允许/拒绝/错误输入审计日志查到写操作;权限解释覆盖三类结果
BTN-009教师课程成员创建教学班、功能开关、批量添加、CSV 导入、禁用恢复、转班full-course 完成真实 API 闭环
BTN-010教师/学生课程资源上传、改名、下载、删除、学生下载教师和学生下载均 OK 且非空;资源最终删除
BTN-011教师/学生课程讨论发帖、回复、锁定、学生锁定态回复锁定后学生回复被拒绝,最后解锁
BTN-012教师题库五类题创建、筛选、编辑、归档已归档题目作为残留
BTN-013教师判题环境创建、编辑、归档已归档 profile 作为残留
BTN-014教师/学生作业创建、编辑、替换试卷、发布、关闭、学生可见性关闭后学生提交被拒绝
BTN-015学生作业提交选择、简答、文件、编程答案提交提交历史、提交详情、附件下载均验证
BTN-016学生编程工作区新建目录/文件、重命名、删除、保存、修订、恢复、重置工作区 API 和页面入口均验证
BTN-017学生/教师判题样例运行、正式判题、报告查看/下载、重判学生和教师报告下载均 OK;教师答案重判验证
BTN-018教师/学生成绩册查询、报告、导出、调分、导入模板、导入、发布、学生查看导出开课和班级维度均覆盖
BTN-019教师/学生实验创建、编辑、发布、附件上传、保存、提交、评阅、发布、关闭学生和教师附件下载均 OK
BTN-020学生通知未读数、单条已读、全部已读、SSESSE 直连本地后端验证 connectednotification
BTN-021三角色侧边栏/快捷入口/顶栏搜索/用户菜单全部导航项点击,搜索 Enter,菜单打开full-navigation 验证三角色全部导航
BTN-022三角色权限负例越权页面、无 token API、无角色 API页面回退到默认首页/无权限/登录;API 返回 401/403
BTN-023三角色响应式1280x800390x844主按钮或移动导航菜单可见可点击

5. 本轮修复

文件问题修复验证
PlatformConfigEntity.javanullable 配置字段清空后未写回对可空字段使用 FieldStrategy.ALWAYS平台配置集成测试和 full-admin
CourseAdministrationApplicationService.java开课 keyword 搜索大小写不一致改为大小写不敏感查询课程集成测试和 full-admin
JwtTokenService.java无 primary org 用户登录写入 null JWT claim非空时才写入 claimauth 集成测试
real-backend.ts登录结果字段、429 重试、下载断言、session 复用不足修复 userId、只对 429 retry、下载非空断言、支持传入 sessionfull suites
full-fixtures.ts种子学生可能被旧权限脚本置为 DROPPED每轮创建新的 active E2E-* fixture studentfull suites
full-assignment-judge.spec.ts教师提交详情页仍用学生 cookie跳转前切换到教师 session3 passed
full-grading-lab-notification.spec.tsNode fetch 经 Next rewrite 读取 SSE chunk 不稳定,且触发函数可重复执行SSE 探针直连 AUBB_SERVER_ORIGIN,reader 加 deadline,触发状态独立保存3 passed
full-navigation-permission.spec.ts未先进入角色 shell、同名链接严格模式冲突、按钮文案和路由守卫断言不匹配登录后进入角色首页,限定 navigation,改用“新增用户”,允许默认首页回退3 passed
playwright.config.ts、旧 smoke specs、real-backend.ts完整真实后端套件并行跑共享账号会触发登录限流,30 秒预算下出现超时真实后端模式改为 1 worker 和 90 秒预算;非认证 smoke 使用 API session 注入;UI 登录 helper 只在明确 429 时等待重试完整 npm run test:e2e36 passed

6. 残留数据

类型残留策略
E2E-* 用户管理端、课程成员和 fixture student 用例会保留用户,用于审计;无统一删除 API
E2E-* 组织、学期、课程模板、开课创建后保留;无删除 API
E2E-* 作业、提交、判题、成绩记录创建后保留;当前业务无删除 API
题库和判题环境已归档后保留
课程资源用例内删除
实验最终关闭后保留
旧 seed 变更权限 realrun 脚本可能保留 U-ST1 在 A1 为 DROPPEDU-STX1 A1 到 A2 转班状态;full fixture 已规避

7. 当前风险

风险说明
UI 点击深度部分重写入闭环通过 API helper 完成,页面入口和关键按钮已打开验证;不是每个表单字段都通过鼠标键盘逐项填写
数据残留本地库会累积 E2E-* 数据;报告记录残留类型,未执行破坏性清库
SSE 路径差异浏览器 UI 使用前端配置和轮询回退;测试中的 SSE 事件为直连本地后端验证,避免 Node fetch 经 Next rewrite 的流式读取差异
全量结论依赖本地环境结论只针对本地 Docker、18080 后端、3000 前端和当前种子数据,不代表生产环境

8. 收尾状态

项目结果
前端 3000Task 11 已停止;curl --max-time 2 -sS http://127.0.0.1:3000/login 连接失败
后端 18080Task 11 已停止;curl --max-time 2 -sS http://127.0.0.1:18080/actuator/health/readiness 连接失败
Docker composedocker compose down 已执行;docker compose ps 无运行服务

9. 2026-05-17 本轮按钮级验证重启记录

本节重新开启当前会话的按钮级验证,不直接沿用上一轮“已通过”状态。

输入当前证据用途
源码控件扫描`rg -n "Buttonbutton
页面清单find src/app -name page.tsx 返回 45 个业务页面确定待打开的真实浏览器页面
E2E 资产find src/tests/e2e -type f 返回 auth、admin、course、assignment、grading/lab/notification、navigation full suites 和 helper后续真实 Playwright 验证的起点
运行门禁根目录 plan.md 第 0、1、3、5 节真实前端、真实后端和真实依赖;禁止 Playwright mock;桌面和移动视口;成功/失败/权限负例/刷新状态

9.1 当前待验证按钮域

代表页面/操作当前状态
Auth/session登录、错误登录、刷新、退出、角色守卫待本轮真实后端与前端启动后验证
Admin平台配置、组织、用户/CSV、学期、模板、开课、审计、权限解释待本轮真实 Playwright 验证
Teacher course/content课程、班级、成员、公告、资源、讨论、题库、判题环境待本轮真实 Playwright 验证
Assignment/submission/judge作业创建/编辑/发布/关闭、学生提交、workspace、样例运行、正式判题、重判/下载待本轮真实 Playwright 验证
Grading/lab/notification成绩导出/导入/发布、实验附件/评阅、通知已读/SSE待本轮真实 Playwright 验证
Navigation/responsive三角色侧边栏、快捷入口、顶栏搜索、用户菜单、移动菜单待本轮真实 Playwright 验证

9.2 下一步

启动本地依赖、后端、前端后,先执行 auth.spec.ts 三角色登录基线,再按 full suites 收敛按钮矩阵。本节后续只记录当前会话运行结果。

9.3 认证按钮基线结果

页面/操作当前命令结果
/login 错误/正确登录入口和三角色落点AUBB_E2E_REAL_BACKEND=1 ... npx playwright test src/tests/e2e/auth.spec.ts --project=chromium5 passed
退出登录菜单项同上已覆盖,退出后回到登录页
学生访问管理员工作区同上已覆盖权限负例

本轮已确认认证 smoke 连接真实前端 3000 和真实后端 18080,没有使用 Playwright route mock。

9.4 2026-05-17 Full Suite 按钮覆盖结果

按钮/操作域当前 suite结果
管理端平台配置、组织、用户/CSV、课程治理、审计、权限解释full-admin.spec.ts5 passed
教师课程班级、成员、资源上传下载、讨论锁定、题库、判题环境full-course.spec.ts5 passed
作业创建/编辑/发布/关闭、学生提交、workspace、判题、重判full-assignment-judge.spec.ts3 passed
成绩导出/导入/发布、实验附件与评阅、通知已读full-grading-lab-notification.spec.ts3 passed
三角色导航、顶栏搜索、用户菜单、权限负例、桌面/移动操作full-navigation-permission.spec.ts3 passed

本轮 full suite 小计 19 passed。剩余验证:完整 npm run test:e2e、前端/后端/文档门禁、最终报告和 git 摘要。

9.5 完整按钮级门禁收敛

验证项当前证据结果
完整真实后端 E2EAUBB_E2E_REAL_BACKEND=1 AUBB_SERVER_ORIGIN=http://127.0.0.1:18080 PLAYWRIGHT_TEST_BASE_URL=http://127.0.0.1:3000 ... npm run test:e2e36 passed
E2E mock 静态复核rg 检查 page.routecontext.routeroute.fulfillroute.abortroute.continuemockmsw无命中
前端静态门禁npm run lintnpm run typechecknpm run testnpm run build全部通过;unit/contract 24 tests 通过;build 生成 30 个静态页面
后端门禁run_permission_e2e.shspotless:checkmvn verify权限 22/22;Spotless BUILD SUCCESS;verify 318 tests,0 failures / 0 errors

9.6 最终按钮覆盖状态

最终状态
Auth/session已真实验证:错误登录、三角色正确登录、退出、refresh/revoke、无 token、学生越权
Admin已真实验证:平台配置、组织子节点、用户创建/搜索/详情/状态/会话、CSV、学期、模板、开课、审计、权限解释
Teacher course/content已真实验证:班级、成员、功能开关、资源上传/改名/下载/删除、讨论锁定、题库、判题环境
Assignment/submission/judge已真实验证:作业创建/编辑/发布/关闭、学生提交、附件下载、workspace、样例运行、正式判题、重判
Grading/lab/notification已真实验证:成绩查询/导出/导入/发布、实验附件/评阅、通知未读/已读/SSE
Navigation/responsive已真实验证:三角色侧边栏、顶栏搜索、用户菜单、权限负例,桌面和移动关键操作

9.7 边界

本报告的“按钮级”指当前业务主操作、页面入口、上传/下载、发布/关闭、权限负例、刷新后状态、桌面和移动视口均有真实运行证据。部分复杂写入准备动作通过 API helper 建立前置数据,不表示每个表单字段都由鼠标键盘逐项填写。E2E 过程只记录环境变量名,不记录密码、token、cookie、JWT 或私钥值。

9.8 收尾状态

项目当前结果
前端 3000Next dev server 已停止;curl --max-time 2 http://127.0.0.1:3000/login 连接失败
后端 18080Spring Boot 已停止;curl --max-time 2 http://127.0.0.1:18080/actuator/health/readiness 连接失败
Docker composedocker compose down 已执行;docker compose ps 无运行服务;未删除 volumes