质量指标与全层级验证矩阵
严格基于 scripts/qa/core-business-scenario-runner.py、docs/_meta/core-business-test-matrix.md 及真实浏览器端到端验收报告生成。杜绝任何未经代码或测试证实的扩写。
分层质量防御金字塔
从离线单元逻辑、跨模块端到端集成、物理数据库落库校验到浏览器界面交互的四级防护体系。
第 4 层:真实浏览器端到端验收 (Final Browser Acceptance) PASS
真实浏览器端到端交互:登录、表单建档、计划排课、冲突 Warning 弹窗确认、报到确认及 Web 班牌。
第 3 层:Kingbase 数据库落库只读断言 (DB Assertions) PASS
11 项物理 SQL 只读断言:外键无孤儿记录、场地 XOR 互斥、逻辑删除标志、结训完成时间及退训防破坏保护。
第 2 层:核心业务场景集成测试 (SC-01 ~ SC-06) PASS
Python 自动化套件覆盖正向全链路、报名拦截、排课预检 Warning/Block、班牌降级、结训事务及报到考勤闭环。
第 1 层:后端单元与集成测试 (Backend Unit / Integration) PASS
Maven Surefire 全量测试集,涵盖状态机流转、排课冲突算法、脱敏工具类与权限注解断言。
核心业务场景集成测试 (SCENARIO-01 ~ SCENARIO-06)
严格对齐 scripts/qa/core-business-scenario-runner.py 真实代码逻辑,默认呈现关键结论,点击可查阅详细步骤。
完整正向业务闭环全链
- 基础资源就绪:成功创建 Teacher、Course、Classroom 及 TrainingSite。
- 开班排课全链:拟定计划、绑定课程师资、学员入班待报到、课表聚合正常。
- 自动结训完成:计划流转至已结束,活动学员自动结训完成并写入 complete_time。
展开 15 步详细交互验证
POST /train/plans/{id}/complete 强事务批量流转状态。学员报名异常规则与状态区分
- 重复报名拦截:同一计划重复报名触发唯一索引,准确返回
40030。 - 容量超限拦截:入班人数超过计划
recruit_num上限时拦截返回40031。 - 状态严格区分:学员主档状态 (正常/停用) 与参训状态机独立解耦流转。
展开异常校验与拦截细节
排课预检 Warning 与 Hard Block 硬阻断
- 四维冲突预检:教师冲突硬阻断;教室/场地/班级重叠返回 Warning 提示。
- 非阻断合规:Warning 级别由教务员确认保存,严格禁止 force 旁路参数。
- 互斥与锁定:场地 XOR 互斥强校验;已结训计划强阻断变更 (
40012)。
展开预检机制与阻断契约
40010。invalid venue XOR = 0。40012: PLAN_LOCKED。电子班牌绑定与课表降级映射
- UUID 主键规范:班牌创建自动生成 32 位 UUID,默认在线状态
0。 - 课表降级规则:0 块板为 null,恰好 1 块板返回对应 SN,多块板降级为 null。
- 逻辑删除保障:调用删除置
del_flag='2',业务接口隔离且物理数据保留。
展开教室绑定与降级细节
del_flag='2' 匹配成功。结训生命周期与退训学员保护
- 计划结训 API:调用结训接口,Plan 状态成功流转为
2:已结束。 - 活动学员结训:待报到/已报到学员批量流转为
4:已完成并记录时间。 - 退训学员防覆盖:已退训学员 (
status=3) 状态与完成时间受严格保护。
展开核心不变量与事务保障
POST /train/plans/{id}/complete 强事务批量更新。现场报到与课堂考勤完整闭环
- 现场报到确认:调用报到接口返回 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 物理库上执行的只读一致性核查。
| 断言项目 | 验证逻辑与 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 |