Files
STM32F4-Base/test/board/README.md
T
wandering1 2055de0303 测试:落地测试架构改进 T-1~T-5(套件开关门禁/汇总行校验/通用 harness/公共断言宏/多套件编排)
背景: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/开关切换/异常还原均实测通过。
2026-10-01 07:28:57 +08:00

46 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# test/board/ — 板端测试套件
> ⚠️ **编入固件**的测试代码(由 testTask 执行)。这些 `.c` 已注册到 Keil 工程
> `MDK-ARM/STM32F4-Demo.uvprojx`,占用 MCU 的 RAM/Flash。
## 文件一览
| 文件 | 测试对象 / 作用 |
|---|---|
| `test_config.c/h` | **测试任务配置**:`TEST_SUITE_*` 套件选择开关(互斥)+ `ENABLE_DESTRUCTIVE_TESTS` |
| `test_common.h` | **公共断言内核**:`test_stats_t` + `TEST_CHECK_IMPL`/`TEST_REPORT_IMPL`;各套件用一行宏绑定自身统计变量(T-4) |
| `ch395f_test_task.c/h` + `ch395f_test.h` | CH395F 以太网(硬件层 Phase 1~5 / NET 层 Phase 6~11) |
| `gd5f_test_task.c/h` + `gd5f_test.h` | GD5F2GQ5UE SPI NAND 存储 |
| `sd2506_test_task.c/h` + `sd2506_test.h` | SD2506 RTC |
| `storage_test_task.c/h` + `storage_test.h` | 存储性能 |
| `net_test_task.c/h` | 网络层测试 |
| `net_latency_test.c/h` | 链路时延探针(DWT CYCCNT 时基,MCU 专属) |
## ⚠️ 构建约束(`AGENTS.md` 详述)
- **套件互斥**:`test_config.h` 的 `TEST_SUITE_CH395F/STORAGE/GD5F/RTC` 一次只能启用一个
(违反则 `#error`);**全部注释 = 产品构建**
- ⚠️ **测试固件不得静默提交**:`TEST_SUITE_*` 开关受 pre-commit 钩子 `test-suite-switch`
门禁——默认要求全部注释。跑完套件回归**务必改回产品构建**再提交(2026-10-01 实测已提交
HEAD 里 `TEST_SUITE_CH395F` 就是开启状态,纯靠人记得改;故补此门禁)。确需提交测试构建时用
`ALLOW_TEST_BUILD=1 git commit ...` 或 `python scripts/check_test_suite.py --allow-test-build` 显式放行
- **破坏性用例默认关闭**:`ENABLE_DESTRUCTIVE_TESTS`(默认注释)控制写/擦 NAND、格式化、
坏块注入。关闭时为**只读模式**(横幅 `mode: READ-ONLY`),可随时在在用设备上跑
- ⚠️ 实测一轮破坏性 GD5F 运行即让 dhara **多记一个坏块**(容量下降且需全片擦除恢复)——
只在产线首启或明确需要时打开
- CH395F 套件:硬件层与 NET 层模式互斥
- **总线独占**:CH395F 硬件层模式下 netTask 自挂起,testTask 独占 CH395F
## 添加新测试套件
1. 在 `test_config.h` 加开关(并入互斥 `#error` 检查)
2. 新建 `<模块>_test_task.c/h`
3. **注册进 Keil 工程**(`<FilePath>..\test\board\xxx.c</FilePath>`)
4. 跑回归:`@test`(`test/host/run_boot_test.py`)
## 相关文档
- 测试指南:`docs/测试说明/CH395F_Test_Guide.md`、`GD5F2GQ5UE_Test_Guide.md`、`SD2506_Test_Guide.md`、`FTP_Test_Guide.md`
- 套件配置:`AGENTS.md`「测试与验证」章
- 容量恢复:`docs/测试说明/存储维护与容量恢复.md`