Files
STM32F4-Base/.opencode/command/test.md
T

75 lines
4.0 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.
---
description: Build → flash (download) → capture USART1 debug log → verify boot/test markers → iterate. The full automated test loop for the STM32F4-Base target.
agent: build
---
Run the full automated test loop: **build → download → capture serial debug → verify markers → report/iterate**.
Prerequisites (checked in step 0):
- Repo `.venv` exists with `pyserial` installed (rebuild per AGENTS.md "Python 环境" if missing).
- ST-Link probe connected; target powered. The USB-serial (CH340) may stay idle while flashing — ST-Link download does not conflict with the serial port.
## Procedure
### Step 0 — Pre-flight: serial assistant + port
Verify the serial assistant works and the target port exists:
```powershell
& '.venv\Scripts\python.exe' 'tools/serial_tool/serial_tool.py' selftest # SELFTEST PASS
& '.venv\Scripts\python.exe' 'tools/serial_tool/serial_tool.py' ports # JSON: 端口列表 + configured 标注
```
Read `.opencode/serial_config.json` for the authoritative `portName` (COM6) and confirm it appears in the `ports` output. If the port is missing, the CH340 driver or the cable is the problem — do not continue.
### Step 1 — Build verify
Run the build script (repo-relative; the repo root is the working directory):
```powershell
& "MDK-ARM\build.bat"
```
Interpretation (per AGENTS.md): exit code 0 = PASS (0 errors, 0 warnings). 1/2+ = FAIL. If it fails, read `MDK-ARM/build_log.txt`, fix, and rerun `@build` until exit code 0 **before** touching the hardware.
### Step 2 — Flash + capture boot log (one orchestrated call)
Use `test/run_boot_test.py` (pure-stdlib Python, 2026-09-20 起替代 PowerShell 版) which opens the port + clears the log (arming),
flashes, waits for RX silence, extracts the boot log and verifies — all in one
call. The serial daemon buffers the full stream in `tools/serial_tool/state/serial.log`,
so nothing can be lost between steps:
```powershell
& '.venv\Scripts\python.exe' test/run_boot_test.py `
--settle-ms 8000 --max-wait-ms 30000 `
--flash-cmd "MDK-ARM\download.bat" `
--required "App init OK;Network Init;net init: OK" `
--forbidden "FAIL;ERROR;HardFault"
```
`--port` defaults to `.opencode/serial_config.json`; override only if needed.
Exit codes: **0 = PASS**, 1 = FAIL (marker miss / forbidden hit), 2 = capture/flash error, 3 = preflight/usage error.
### Step 3 — Iterate
- **PASS** → report the verdict and which markers matched; done.
- **FAIL** → the `[MISS]`/`[HIT]` lines + the log tail show what went wrong. Fix the code, then loop again from **Step 1**. Do not skip the build step.
## Alternative: interactive serial debug
For interactive command/response (not boot-log capture), drive the serial assistant directly:
1. `ports` → confirm the target port.
2. `open --port COM6 --baud 115200` (idempotent; auto-starts the daemon).
3. `send "text"` / `send --hex 0D0A` to transmit; `log --tail 20` (or Read the log file directly) to see RX history.
4. `close` when done (the daemon itself keeps running; `stop` only if the port must be freed for another tool).
## Notes
- **串口端口**:以 `.opencode/serial_config.json` 为准(本机为 COM6)。每次连接前先读它。
- **全量历史 = 日志文件**:daemon 把 RX/TX/SYS 持续写入 `tools/serial_tool/state/serial.log`,直接 Read/Grep 即可,无需采集窗口仪式。
- **⚠️ 静默判据**:boot 任务间有 ~3-4s 自然静默间隙,`--settle-ms` 必须 ≥ 8000(默认已如此),否则日志截断。
- **daemon 生命周期**:任何命令自动拉起 daemon(无需显式 start);`restart` 保证加载最新代码;强杀 daemon 后下条命令自动恢复(串口需重新 `open`)。
- UI (LVGL) task `ui_task` 已有 `UI port init: OK` / `UI menu init: OK` 打印,可用 `--required "UI port init: OK;UI menu init: OK"` 自动回归 UI 初始化。
- Full command contract / daemon behavior / known traps: `docs/测试说明/串口助手设计说明.md` and `docs/测试说明/自动化测试流程.md`.