Files
STM32F4-Base/test/host
wandering1 883c9dd0cc feat(adc): B1 实现 ADC 采集链路(adcTask + 看门狗)
B1(ADC 采集链路)落地,消化 P1-1:
- adc_task.c:空桩 -> 真实消费者。每 1ms 触发一次 CONVST,
  用 tpafe5160_snapshot() 原子取数(AGENTS 铁律)+ 帧统计 +
  每 10s 心跳日志。只取数,不做保护运算。
- Src/freertos.c:手工创建 adcTask(512 words / Normal,落
  USER CODE 保护区,同 timeSyncTask 先例)。
- task_watchdog:新增 TASK_WD_ADC;required_mask 产品 0x37 ->
  0x77、ENABLE_HW_LAYER_TESTS 0x35 -> 0x75。
- default_task.c:栈水位探针增列 adcTask(extern + 表项)。
- 脚本:stack_report.py 增 ROOTS/RUNTIME_ALIAS;gen_task_table
  增 adcTask(README/AGENTS 任务表已 --write)。
- 单测:watchdog_test.c beat_all/掩码断言同步(39 断言全绿)。
- 文档:待处理内容/看门狗设计/RAM 方案/继保规划 同步。

验证:@build 0 错 0 警;stack_report 静态最坏链 504B(余 75%);
pre-commit 全绿。剩 @test 实机闭环。
2026-10-10 14:33:32 +08:00
..

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

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

文件一览

流程与判读

脚本 作用
run_boot_test.py @test 一键闭环:开串口+清日志 → 烧录 → wait-idle → verify_log 校验(退出码 0=PASS)
verify_log.py 日志标记校验:Required / Forbidden 标记 → PASS / FAIL;可选 --require-suite-summary 校验套件汇总行(=== <名称>: N/M PASSED (failed=0) === 且 N>0),抓"没跑到汇总行/断言数为 0"的盲区(T-2)
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 时间同步推送服务(对时源)

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

文件 作用
common/unit_test_harness.py 通用单测 harness(L0.5):探测 MSVC → 拼 INCLUDE/LIB → 编译 → 运行 → 判定退出码。各模块运行器只做声明式配置(TestBuild),不含工具链细节
watchdog/run_unit_test.py 看门狗判定状态机单测:声明 TestBuild 后调 harness,用 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 上编译
sys_clock/run_unit_test.py 系统时钟换算单测:离线编译真实 App/util/sys_clock.c,以可控时钟 + 阴影 RTC 桩驱动,100 断言点覆盖闰年/月末/世纪/2038 上限/星期/30 天惰性再基准化/RTC 故障降级
sys_clock/sys_clock_test.c 测试单元本体(#include 生产源码 + 强符号桩;不改生产代码)
sys_clock/stub/ 桩头文件(main.h/FreeRTOS.h/task.h/dbg_log.h),覆盖 MCU 版以在 PC 上编译
cfg_file/run_unit_test.py 配置引擎单测:离线编译真实 App/cfg/cfg_file.c,以内存虚拟文件系统桩驱动,139 断言点覆盖 INI 解析/四种值类型编解码/段注册校验/load-save-poll 契约/超长守卫/故障注入
cfg_file/cfg_file_test.c 测试单元本体(#include 生产源码 + cfg_store_* 内存 FS 后端桩;不改生产代码)
cfg_file/stub/ 桩头文件(dbg_log.h),覆盖 MCU 版以在 PC 上编译

详见 docs/测试说明/看门狗单元测试说明.md、docs/测试说明/系统时钟单元测试说明.md、 docs/测试说明/配置文件单元测试说明.md; harness 用法见 common/README.md。 已挂 pre-commit 钩子 watchdog-unit-test、sys-clock-unit-test、cfg-file-unit-test。

运行方式

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

# 测试套件构建的回归:要求套件跑到汇总行且断言数 > 0(T-2)
& '.venv\Scripts\python.exe' test/host/run_boot_test.py `
    --required "=== Storage Tests:" --forbidden "ERROR;HardFault;[ERR]" `
    --require-suite-summary "Storage Tests"

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

# 系统时钟换算单测(纯逻辑,无需真机)
& '.venv\Scripts\python.exe' test/host/sys_clock/run_unit_test.py

# 配置引擎单测(纯逻辑,无需真机)
& '.venv\Scripts\python.exe' test/host/cfg_file/run_unit_test.py

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

⚠️ 注意

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

相关文档

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