Files
STM32F4-Base/test/host
wandering1 73941da6b1 看门狗判定状态机增加主机侧单元测试(L0.5 层)
为 task_watchdog.c 的判定逻辑(位图取走清零 / 必需掩码 0x37 判定 /
miss_streak 连续 8 次停喂 / 100ms 抽样节流 / tick 回绕安全)补一层
主机侧纯逻辑单元测试,弥补此前只能靠真机或模拟器才能发现回归的空白。

架构(沿用项目既有"共享核心 + 平台后端"做法,参照 cfg_file_store):
- task_watchdog.h 末段新增"平台后端(内部)"声明 3 个钩子
  (wd_platform_feed / _start / _tick_ms),MCU 端以 __weak 提供默认实现,
  行为与重构前逐字一致(@build 0 错误 0 警告,Flash +20B)。
- 主机侧单测以同名强符号覆盖三钩子,即可离线注入/观测,无需碰 MCU 代码。
- 测试文件 #include 生产源文件本身,保证测的是真代码而非副本。
- 测试专用复位 task_wd_test_reset() 仅 TASK_WATCHDOG_UNIT_TEST 下编入,
  MCU 构建零代码零符号。

测试(test/host/watchdog/,MSVC 离线编译,纯标准库驱动):
- 39 项断言全过(退出码 0);注入故障可复现退出码 1。
- run_unit_test.py 直接拼 INCLUDE/LIB 调 cl.exe,绕开本机被禁的 reg.exe。
- stub/ 三桩头覆盖 main.h / iwdg.h / dbg_log.h。

门禁:pre-commit 新增 watchdog-unit-test 本地钩子(L0.5 层),仅被测文件
或其测试变动时触发;测试开发标准流程.md 新增 L0.5 层说明。

顺带改善:task_watchdog.c 的节流基线 s_last_tick 由函数内 static 提为文件
static(可测性 + 模块状态归一)。
2026-10-01 06:57:01 +08:00
..

test/host/ — 主机端测试脚本

PC 侧的测试驱动与判读脚本(Python,跑在开发机上,经串口/网络与目标板交互)。

文件一览

流程与判读

脚本 作用
run_boot_test.py @test 一键闭环:开串口+清日志 → 烧录 → wait-idle → verify_log 校验(退出码 0=PASS)
verify_log.py 日志标记校验:Required / Forbidden 标记 → PASS / FAIL
e02_probe.py E-02 专项探针(错误码传播审计)

网络 / FTP

脚本 作用
ch395f_socket_test.py Socket 通信测试(回显服务器 / 文件收发)
ftp_test.py FTP 基本功能测试
ftp_up_dl_test.py FTP 上传下载测试
ftp_speed_test.py FTP 传输速度测试
ftp_capture.py FTP 流量抓取
ftp_regression.py FTP 回归套件

时间 / 时延

脚本 作用
latency_peer.py 链路时延测试的 PC 对端(peer)
time_sync_server.py 时间同步推送服务(对时源)

主机侧单元测试(纯逻辑,无硬件)

脚本 作用
watchdog/run_unit_test.py 看门狗判定状态机单测:用 MSVC 离线编译真实 App/util/task_watchdog.c(可观测桩驱动),39 用例穷举边界。零硬件、秒级(退出码 0=PASS/1=FAIL/2=环境错误)
watchdog/watchdog_test.c 测试单元本体(#include 生产源码 + 平台钩子桩)
watchdog/stub/ 桩头文件(main.h/iwdg.h/dbg_log.h),覆盖 MCU 版以在 PC 上编译

详见 docs/测试说明/看门狗单元测试说明.md。已挂 pre-commit 钩子 watchdog-unit-test。

运行方式

# @test 一键闭环(推荐,需真机)
& '.venv\Scripts\python.exe' test/host/run_boot_test.py

# 看门狗判定状态机单测(纯逻辑,无需真机)
& '.venv\Scripts\python.exe' test/host/watchdog/run_unit_test.py

串口端口配置在 .opencode/serial_config.json(单一配置源,当前 COM6/115200)。

⚠️ 注意

  • PYTHONPATH/路径敏感:脚本按仓库根相对路径读写,从仓库根执行
  • 本目录被 pre-commit 门禁的 cppcheck / 代码规范排除(test/ 豁免); 但 watchdog/run_unit_test.py 自身作为独立钩子参与门禁(见上)
  • 台架探针族(TCP 复连 / FTP 中止等)在 MDK-ARM/*.py,与本目录分工不同
  • watchdog/ 单测需要本机装有 MSVC(VS2019/2022 的 C++ 工具链);无则脚本报环境错误(退出码 2)

相关文档

  • docs/测试说明/自动化测试流程.md — @test 细节与失败模式
  • docs/测试说明/测试开发标准流程.md — 测试分层与门禁
  • docs/测试说明/看门狗单元测试说明.md — 主机侧单测(用例 / 平台层 / 扩展方法)
  • docs/测试说明/CH395F_Test_Guide.md、FTP_Test_Guide.md