Quality Assurance & Verification

质量指标与全层级验证矩阵

严格基于 scripts/qa/core-business-scenario-runner.py、docs/_meta/core-business-test-matrix.md 及真实浏览器端到端验收报告生成。杜绝任何未经代码或测试证实的扩写。

331 / 331
后端单元与集成测试
2026-09-17一期综合验收基线:331项后端测试通过
6 / 6
核心业务场景套件
SC-01 ~ SC-06 全部通过
110
真实 HTTP API 探测
自动化请求全量记录
0
服务端 500 异常
HTTP 500 Count = 0
11 / 11
Kingbase 持久化断言
实体与外键完整性无孤儿
PASS
浏览器真实 UI 验收
Final Browser Acceptance
0
控制台阻断错误
Console Error = 0

分层质量防御金字塔

从离线单元逻辑、跨模块端到端集成、物理数据库落库校验到浏览器界面交互的四级防护体系。

第 4 层:真实浏览器端到端验收 (Final Browser Acceptance) PASS

真实浏览器端到端交互:登录、表单建档、计划排课、冲突 Warning 弹窗确认、报到确认及 Web 班牌。

Console Error: 0

第 3 层:Kingbase 数据库落库只读断言 (DB Assertions) PASS

11 项物理 SQL 只读断言:外键无孤儿记录、场地 XOR 互斥、逻辑删除标志、结训完成时间及退训防破坏保护。

11 / 11 PASS

第 2 层:核心业务场景集成测试 (SC-01 ~ SC-06) PASS

Python 自动化套件覆盖正向全链路、报名拦截、排课预检 Warning/Block、班牌降级、结训事务及报到考勤闭环。

6 / 6 PASS · 110 Requests

第 1 层:后端单元与集成测试 (Backend Unit / Integration) PASS

Maven Surefire 全量测试集,涵盖状态机流转、排课冲突算法、脱敏工具类与权限注解断言。

331 PASS (2026-09-17验收基线)

核心业务场景集成测试 (SCENARIO-01 ~ SCENARIO-06)

严格对齐 scripts/qa/core-business-scenario-runner.py 真实代码逻辑,默认呈现关键结论,点击可查阅详细步骤。

SCENARIO-01 · PASS Happy Path

完整正向业务闭环全链

  • 基础资源就绪:成功创建 Teacher、Course、Classroom 及 TrainingSite。
  • 开班排课全链:拟定计划、绑定课程师资、学员入班待报到、课表聚合正常。
  • 自动结训完成:计划流转至已结束,活动学员自动结训完成并写入 complete_time。
展开 15 步详细交互验证
· 开班计划采用 32 位 UUID 主键,初始状态为 0:草稿。
· Timetable 课表接口准确聚合课程名称、授课教师及场地名。
· 调用 POST /train/plans/{id}/complete 强事务批量流转状态。
SCENARIO-02 · PASS Enrollment Rules

学员报名异常规则与状态区分

  • 重复报名拦截:同一计划重复报名触发唯一索引,准确返回 40030。
  • 容量超限拦截:入班人数超过计划 recruit_num 上限时拦截返回 40031。
  • 状态严格区分:学员主档状态 (正常/停用) 与参训状态机独立解耦流转。
展开异常校验与拦截细节
· 不存在的非法学员严格拒绝入班。
· 停用学员 (status=0) 严禁报名入班。
· 参训状态机严格维护 0待报到/1已报到/2请假/3退训/4已完成。
SCENARIO-03 · PASS Scheduling Engine

排课预检 Warning 与 Hard Block 硬阻断

  • 四维冲突预检:教师冲突硬阻断;教室/场地/班级重叠返回 Warning 提示。
  • 非阻断合规:Warning 级别由教务员确认保存,严格禁止 force 旁路参数。
  • 互斥与锁定:场地 XOR 互斥强校验;已结训计划强阻断变更 (40012)。
展开预检机制与阻断契约
· 时间倒挂阻断:startTime >= endTime 拦截返回 40010。
· 教室与场地同时为空或同时赋值强行拦截,DB 层面 invalid venue XOR = 0。
· 已结训计划禁止排课变更,返回 40012: PLAN_LOCKED。
SCENARIO-04 · PASS Electronic Board

电子班牌绑定与课表降级映射

  • UUID 主键规范:班牌创建自动生成 32 位 UUID,默认在线状态 0。
  • 课表降级规则:0 块板为 null,恰好 1 块板返回对应 SN,多块板降级为 null。
  • 逻辑删除保障:调用删除置 del_flag='2',业务接口隔离且物理数据保留。
展开教室绑定与降级细节
· 教室详情接口:0 块板返回空数组,1 块板返回长度 1,N 块板返回长度 N。
· 课表 boardSn 降级消除多设备展示歧义。
· 物理库 SQL 断言确认 del_flag='2' 匹配成功。
SCENARIO-05 · PASS Plan Completion

结训生命周期与退训学员保护

  • 计划结训 API:调用结训接口,Plan 状态成功流转为 2:已结束。
  • 活动学员结训:待报到/已报到学员批量流转为 4:已完成 并记录时间。
  • 退训学员防覆盖:已退训学员 (status=3) 状态与完成时间受严格保护。
展开核心不变量与事务保障
· 接口契约:POST /train/plans/{id}/complete 强事务批量更新。
· 核心不变量:已退训记录 complete_time 严格保持为 null。
· 物理 SQL 断言证实历史退训记录零覆盖、零损坏。
SCENARIO-06 · PASS Report & Attendance

现场报到与课堂考勤完整闭环

  • 现场报到确认:调用报到接口返回 reportId,参训状态流转为 1:已报到。
  • 考勤打卡幂等:首次记录打卡时间,重复签到签退严格保持初次时间不变。
  • 人工代签留痕:后台调整考勤自动置 manual_flag = 1 留存审计线索。
展开接口与重复拦截细节
· 报到确认接口:POST /train/enrollments/{id}/report 强事务写入。
· 重复报到防范:对已报到学员再次报到触发拦截返回 40050。
· 人工考勤接口:PUT /train/attendance/{id} 记录调整人与备注。

真实浏览器端到端交互验收 (Final Browser Acceptance)

基于真实运行的端到端验收套件客观记录,据实描述界面打开、列表查询、表单验证与接口调用结果。

基础主数据管理

PASS
  • Teacher 教师:页面成功打开、列表查询、手机号唯一性强校验生效。
  • Student 学员:建档表单校验通过,身份证末4位脱敏掩码展示正常。
  • Classroom 教室:理论教室容量与状态设置正常渲染。
  • TrainingSite 场地:实训场地类型与容量管理正常。

核心教务编排交互

PASS
  • Plan 培训计划:拟定 32 位 UUID 计划,生命周期初始为草稿。
  • PlanCourse 课程绑定:课程选择与师资指派正常,总学时联动累加。
  • Enrollment 学员报名:入班名单展示、招生容量上限校验拦截生效。
  • Timetable 可视化排课:课表渲染,冲突 Warning 取消/确认入库均正常。

现场执行与系统工具

PASS
  • 开班报到确认:前端菜单「开班签到」,实际调用 /report 接口 200 OK,状态由待报到流转为已报到。
  • 电子班牌终端:前端物联路由 /equip/board 页面正常渲染。
  • 统计分析 (Analytics):报到、考勤、学时、画像报表只读查询正常。
  • 系统接口平台 (Swagger):系统工具 → 系统接口 在线渲染,v3/api-docs 返回 200。

测试数据清理与审计口径规范

严格区分自动化集成测试与浏览器真实验收的数据保留策略,杜绝将两者混写。

自动化集成测试清理 (Integration Cleanup)

0 残留 (Residue = 0)

core-business-scenario-runner.py 在测试执行过程中自动记录所创建的精确 ID 资源清单 (created-resources.json)。测试断言结束后,严格按逆序调用解绑与清理机制,实现:
· 课次、参训名单、电子班牌精确删除;
· 自动化测试产生的数据残留为 0,保持数据库纯净。

浏览器端到端验收数据 (Browser Acceptance Data)

保留供审计 (KEEP_FOR_AUDIT)

在最终浏览器真实 UI 验收中创建及流转的测试学员、开班计划、报到流水及代签考勤记录,显式全量保留在数据库中,供发布审查、合规抽检及操作日志审计核对,非 0 残留。

技术底层细节与物理 SQL 断言 (展开查阅)

由 DbAssertionChecker 直接在 Kingbase 物理库上执行的只读一致性核查。

11 项 SQL 断言通过 查看 Kingbase 物理库只读一致性断言清单
断言项目 验证逻辑与 SQL 条件 预期值 实测结果
duplicate enrollment 校验同一计划内是否存在相同学员的重复报名记录 0 PASS (0)
orphan lesson 校验是否存在未关联有效计划课程的孤立课次 0 PASS (0)
orphan enrollment 校验是否存在未关联有效培训计划的孤立报名档案 0 PASS (0)
invalid venue XOR 校验课次中教室与实训场地二选一互斥,严禁同时为空或同时设置 0 PASS (0)
del_flag = '2' 电子班牌逻辑删除后底层标志位规范设置为 '2' MATCH PASS
Plan completion 状态联动 结训后学员参训状态正确流转至 4 且 complete_time 真实写入 status=4, time!=null PASS
历史退训保护 已退训记录未被结训批量任务修改覆盖,complete_time 保持为 null status=3, time=null PASS
orphan report 校验是否存在未关联有效报名记录的孤立报到流水 0 PASS (0)
orphan checkin 校验是否存在未关联有效课次或报名的孤立考勤打卡 0 PASS (0)
manual_flag = 1 人工修正考勤记录自动置审计标志位 manual_flag = 1 1 PASS (1)
report enrollment status 报到流水关联的报名记录状态必须为 1(已报到) 或 4(已结训完成) status IN (1, 4) PASS