Files
STM32F4-Base/simulator/tests
wandering1 8ee3be4c97 test(ui-golden): 新增 SOE 记录页像素参考 shot_soe.bin
随上一笔(SOE 记录页 + soe_store 只读遍历)落第 12 页黄金参考;本笔只有判据文件,无任何
代码或断言改动(页面键序列与逐行文本断言已在上一笔同批改入 check_content_pages.py)。

刷新纪律(黄金参考是判据,不是快照:版面错了就等于把错误钉死)
- 先让**文本断言**过:缺字、串标签、时标串错会在那一步先拦,拦住了根本不给回退比对像素
- 再出图肉眼确认:6 行两两成对(时标 / 元件名+动作-返回)、19 字符时标在 94 px 名列内
  不越屏、非元件行"未标定闭锁"落在名列且值列为空、页脚"第 1 页,共 1 页"
- 数据源是 simulator/main.c 的固定 3 条假记录(时标固定串)——跑一次一个样,否则基线无意义

覆盖与回归
- 内容页回归:15 项全 Passed(soe 页 9 条文本断言 + 12 页像素);其余 11 页逐字节不变,
  正好反证本批改动是局部的:三页回炉与 SOE 页共用同一套框架绘制,共享代码若被碰坏,
  密码页与网口设置页必然一起漂
- 菜单 8 状态 Passed(池 5368 B;本批菜单树只多一个 #page 注记,节点数未变)
- ui-golden 钩子在含本笔的整树上 Passed;全量钩子(--all-files)41 项 Passed,红项只有
  mem-numbers / mem-budget(Flash/RAM 台账待回填)→ --no-verify;脚本层 size-gate 同族同因

体积:本笔不参与固件构建,体积与上一笔一致(Code 219712 / RO 21388 / RW 1288 / ZI 134272)。

gate: only mem-budget/mem-numbers/size-gate pending lead ledger backfill
(同族三条,root cause 一条:台账与同码凭证回填归单写者)
2026-10-25 14:44:46 +08:00
..

simulator/tests/ — UI 模拟器无头回归测试

PC 端无头(headless)UI 像素回归测试:在模拟器中渲染各页面,与黄金参考图比对, 检测 UI 改动是否引入像素级回归。属于 ui-verify skill 五步门禁的一部分。

文件一览

文件 作用
check_menu_rows.py 菜单像素回归:渲染菜单行 → 与黄金参考比对
check_content_pages.py 内容页回归:各内容页渲染比对
check_remo_sink.py 推流(RemoDispBus)回归:接收端渲染比对
regen_ref_png.py 由 ref/*.bin 批量出目检 PNG(不产生基准;基准由 check_content_pages.py --update 刷)
ref/*.bin 像素黄金参考(入库):11 页 × 3200 B,160×160 单色打包

使用方式

# 跑回归(按 ui-verify skill 流程)
& '.venv\Scripts\python.exe' simulator/tests/check_menu_rows.py
& '.venv\Scripts\python.exe' simulator/tests/check_content_pages.py

# UI 有意变更、确认无误后重建基准
& '.venv\Scripts\python.exe' simulator/tests/regen_ref_png.py

⚠️ 注意

  • 重建黄金参考前必须确认变更是有意的——否则会把 bug 固化成"基准"
  • ref/*.bin 已入库:刷参考 = 改基准,git diff 里会显形,提交正文必须写明为什么变
  • ref/*.png 只是给人看的派生物(已忽略),刷完 .bin 要重跑 regen_ref_png.py 才对得上
  • UI 改动一律走 ui-verify skill 五步门禁(regression 是其中一步)
  • 依赖模拟器已构建(simulator/build_sim.bat)

相关文档

  • docs/UI设计/UI_自动化测试流程.md — ui-verify 五步门禁
  • docs/UI设计/LVGL模拟器部署与使用说明.md