Files
STM32F4-Base/docs/测试说明/自动化测试流程.md
T
2026-08-30 15:38:40 +08:00

4.3 KiB
Raw Blame History

自动化测试流程(AI 迭代闭环)

目标:AI 改完代码后,可自动完成「构建 → 烧录 → 抓取串口调试信息 → 校验 → 迭代」,无需人工开终端/串口助手。

总体流程

@test 命令触发
   │
   ├─ Step 0  预检 serial-mcp-server 二进制 + list-ports 确认 COM
   ├─ Step 1  构建验证   MDK-ARM/build.bat          (0 错误 0 警告才继续)
   ├─ Step 2  烧录 + 采集(一条命令编排,先采集等 first-byte 再烧录)
   │           test/run_boot_test.ps1  (内含 serial_capture.ps1 + download.bat + verify_log.ps1)
   ├─ Step 3  判定:
   │           PASS → 报告,结束
   │           FAIL → 依据 [MISS]/[HIT] + 日志尾部,修改代码后回到 Step 1

命令与脚本清单

名称 位置 作用
@build .opencode/command/build.md 仅编译验证(0 错误 0 警告)
@download .opencode/command/download.md 编译并烧录(ST-Link)
@test .opencode/command/test.md 完整闭环:build → capture+download → verify → iterate
test/run_boot_test.ps1 test/run_boot_test.ps1 一键闭环:采集(含 EOF 重试)→ 烧录 → 提取日志 → verify,退出码 0=PASS/1=FAIL/2=错误
test/serial_capture.ps1 test/serial_capture.ps1 底层采集编排:稳定启动采集 → 烧录 → 等采集结束;内置 EOF 自动重试
test/verify_log.ps1 test/verify_log.ps1 对日志做标记校验,输出 PASS/FAIL 并返回退出码
serial-mcp-server %LOCALAPPDATA%\serial-mcp-server\serial-mcp-server.exe CLI/MCP 串口工具(Adancurusul/serial-mcp-server)

判定标准

  • 构建:@build 退出码 0(0 错误 0 警告),否则不进入硬件环节。
  • 烧录:@download 退出码 0(run_boot_test.ps1 内部调用)。
  • 日志:verify_log.ps1 退出码
    • 0 = PASS:所有 -Required 标记均出现,且无 -Forbidden 模式命中
    • 1 = FAIL:存在缺失标记([MISS])或违规模式([HIT])
    • 2 = 日志文件不可读

默认开机标记(来自固件)

标记 来源
App init OK App/app_main.c
RS485 init: OK App/app_main.c
NAND init: App/app_main.c
ADC init: App/app_main.c
SD2506 ID: / time: / temp: / battery: App/app_main.c
Network Init / net init: OK / MAC: / PHY: App/task/net_task.c

失败模式应对

现象 处理
serial-mcp-server 不存在 需先编译安装(见 docs/测试说明/serial-mcp-server_串口调试.md)
采集报 UnexpectedEof: zero bytes 已由 serial_capture.ps1 自动重试处理;若仍失败,检查 COM 是否被其他程序占用
抓到日志缺 Network Init IdleTimeoutMs 太小(boot 阶段有 ~3-4s 静默间隙),调到 8000ms
烧录后无数据 采集必须在烧录前启动(run_boot_test.ps1 已保证);InitialTimeoutMs 需覆盖编译+烧录耗时(90000)
端口被占用 先 serial_close / 结束残留 serial-mcp-server 进程;Keil ST-Link 不占 COM
日志中无 UI 相关输出 见下节「UI 自动化」

UI 屏幕自动化(当前缺口)

App/task/ui_task.c 目前没有 DBG 打印,串口无法确认 UI 是否成功初始化。建议在固件中补充:

if (ui_port_init() != 0) { DBG_ERROR("UI port init: FAIL"); } else { DBG_INFO("UI port init: OK"); }
if (ui_menu_init() != 0) { DBG_ERROR("UI menu init: FAIL"); } else { DBG_INFO("UI menu init: OK"); }

加完后把 UI port init: OK / UI menu init: OK 加入 @test 的 -Required 标记,即可自动回归 UI 初始化。屏幕上的内容仍需人工目检或后续接入截屏/控制类方案。

扩展用法

  • 单模块回归:@test 后接 -Required 定制,例如网络回归用 -Required "App init OK;Network Init;net init: OK;PHY: 100M FULL"。
  • 测试套件构建:test/test_config.h 开启某个 TEST_SUITE_* 后,把套件打印的 === ... Test: 标题作为 Required 标记,配合 test/ 下各用例输出判断。
  • 长时间采集:serial-mcp-server 支持 --duration-ms 长窗口采集(MCP read 传 duration_ms 即进入 capture 模式)。