Files
STM32F4-Base/test/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

56 lines
2.6 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/`** —— 板端测试套件(`.c/.h`,编入固件由 testTask 执行)
> - **`host/`** —— 主机端脚本(`.py`,PC 侧驱动板子并判读结果)
## 目录结构
| 目录 | 内容 | README |
|---|---|---|
| `board/` | 板端测试套件(编入 Keil 工程,占 RAM) | [`board/README.md`](board/README.md) |
| `host/` | PC 端测试/判读脚本(Python) | [`host/README.md`](host/README.md) |
| `run_all_suites.py` | **多套件回归编排**(改宏 → 构建 → 烧录 → 采集,`try/finally` 保证还原开关) | 本文 §多套件回归 |
## 运行方式
```bash
# @test 一键闭环(推荐)
& '.venv\Scripts\python.exe' test/host/run_boot_test.py
# 单独校验日志
& '.venv\Scripts\python.exe' test/host/verify_log.py <日志文件>
# 多套件回归编排(需真机;自动改开关 + 构建 + 烧录 + 采集,结束后还原)
& '.venv\Scripts\python.exe' test/run_all_suites.py
& '.venv\Scripts\python.exe' test/run_all_suites.py --suites STORAGE,GD5F
& '.venv\Scripts\python.exe' test/run_all_suites.py --dry-run # 只看计划
```
退出码约定:`0`=PASS / `1`=FAIL / `2`=采集或烧录错误 / `3`=用法或预检错误。
## 多套件回归(`run_all_suites.py`)
套件互斥(编译期 `#error`)意味着跑 4 个套件要手工循环 4 轮。本脚本把它编排成一条
命令,并且**无条件还原** `test_config.h`——**跑完忘还原 = 测试固件进库**,这是它存在的
核心理由(与提交期门禁 `test-suite-switch` 互为独立防线)。
⚠️ 每轮要真机烧录 + 采集,4 套件约数分钟起;破坏性套件还会改设备持久状态。
**仅回归窗口用,绝不挂 pre-commit**。
## ⚠️ 注意
- 本目录**被 pre-commit 门禁排除**(测试代码不受 C 规范约束)
- `board/` 套件占用 RAM,启用前先核算预算(见 `docs/内存管理/`)
- **Keil 工程已同步**:`board/` 下 7 个 `.c` 编入 `MDK-ARM/STM32F4-Demo.uvprojx`,
IncludePath 含 `../test/board`;移动文件须同步改工程文件
- 套件选择开关:`board/test_config.h` 的 `TEST_SUITE_*`(互斥,一次只启用一个)
- 测试缓冲用**分 Phase 复用静态缓冲**(避免 `L6406E` 溢出)
## 相关文档
- `docs/测试说明/测试开发标准流程.md` — L0~L3 分层与门禁决策表
- `docs/测试说明/自动化测试流程.md` — `@test` 细节与失败模式
- 各模块测试指南:`docs/测试说明/*_Test_Guide.md`
- `docs/测试说明/链路延迟测试说明.md`