2055de0303
背景:L0.5 主机侧单测落地后复审测试架构,给出 6 条改进意见(P0~P3), 登记进 docs/待处理内容.md「测试与验证基础设施」后逐条实施。 - T-1(P0) 测试套件开关门禁:新增 scripts/check_test_suite.py + pre-commit 钩子 test-suite-switch,默认要求产品构建(全部 TEST_SUITE_* 注释),跑套件回归用 --allow-test-build / ALLOW_TEST_BUILD=1 显式放行。顺带把 test_config.h 中长期 开启的 TEST_SUITE_CH395F 改回注释(仓库此前躺着的是测试固件)。 - T-2(P1) verify_log.py 增加 --require-suite-summary:要求 "=== <名称>: N/M PASSED (failed=0) ===" 且 N>0,堵住"套件没跑到汇总行/ 断言数为 0 仍判 PASS"的盲区;run_boot_test.py 同名参数透传。不传参向后兼容。 - T-3(P1) 抽取通用 harness test/host/common/unit_test_harness.py(工具链探测/ INCLUDE-LIB 拼接/wd4819/GBK 解码/退出码契约);watchdog 运行器 170→55 行,只声明 TestBuild。 - T-4(P2) 新增 test/board/test_common.h 集中断言内核(TEST_CHECK_IMPL/TEST_REPORT_IMPL), 4 套件各用一行宏绑定自身统计变量(保持 g_xxx_stats 独立、防跨套件串数)。 刻意不 include dbg_log.h——否则冻结 DBG_TAG 默认值触发 #47-D 重定义警告。 - T-5(P2) 新增 test/run_all_suites.py 多套件回归编排,try/finally 无条件还原套件开关。 验证:@build 产品构建 0 错 0 警;4 套件逐一构建均 0/0;看门狗单测 39/39 PASS; pre-commit 14 钩子全通过;编排脚本 dry-run/开关切换/异常还原均实测通过。
76 lines
3.6 KiB
Markdown
76 lines
3.6 KiB
Markdown
# 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 上编译 |
|
||
|
||
> 详见 `docs/测试说明/看门狗单元测试说明.md`;harness 用法见 [`common/README.md`](common/README.md)。
|
||
> 已挂 pre-commit 钩子 `watchdog-unit-test`。
|
||
|
||
## 运行方式
|
||
|
||
```bash
|
||
# @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
|
||
```
|
||
|
||
> 串口端口配置在 `.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`
|