82 lines
4.0 KiB
Markdown
82 lines
4.0 KiB
Markdown
---
|
||
name: 测试报告可追踪输出
|
||
overview: 在现有 WalletRegisterBetWinTest 上增加“可追踪测试报告”:每次执行输出并落盘 uid/round_id/biz_id/余额快照,失败时可直接按用户复现。
|
||
todos:
|
||
- id: add-reporter-support
|
||
content: 新增 WalletTestRunContext 与 WalletTestReporter(JSON+Markdown 落盘)
|
||
status: completed
|
||
- id: wire-test-class
|
||
content: 改造 WalletRegisterBetWinTest:记录 uid/round/biz_id,tearDown 输出摘要
|
||
status: completed
|
||
- id: config-and-doc
|
||
content: phpunit.xml 增加 WALLET_TEST_UID/REPORT_DIR;更新 doc 执行说明
|
||
status: completed
|
||
- id: verify-run
|
||
content: 容器执行 phpunit 并确认控制台+报告文件含 uid
|
||
status: completed
|
||
isProject: false
|
||
---
|
||
|
||
# 钱包集成测试可追踪报告方案
|
||
|
||
## 问题
|
||
当前 [tests/Feature/WalletRegisterBetWinTest.php](tests/Feature/WalletRegisterBetWinTest.php) 每个用例都会 `makeUid()` 生成随机用户,PHPUnit 默认只显示 `OK (3 tests, 37 assertions)`,**看不到本次用了哪个 `uid`、`round_id`、`biz_id`**,联调排障和 DB 核对都不方便。
|
||
|
||
## 目标
|
||
- 跑完测试后,**控制台**能看到每个用例的测试用户与关键业务 ID。
|
||
- **落盘一份报告**(JSON + 可读 Markdown),便于复制 `uid` 去查库或手工 curl 复现。
|
||
- 可选:通过环境变量固定 `uid`,便于反复验证同一用户。
|
||
|
||
## 实现方案
|
||
|
||
### 1. 新增测试上下文与报告器
|
||
新增 [tests/Support/WalletTestRunContext.php](tests/Support/WalletTestRunContext.php):
|
||
- 字段:`testName`, `uid`, `currency`, `roundId`, `bizIds`(register/bet/win_mid/win_final), `traceId`, `steps[]`(每步 API、code、余额快照), `status`, `errorMsg`。
|
||
|
||
新增 [tests/Support/WalletTestReporter.php](tests/Support/WalletTestReporter.php):
|
||
- `startRun()` / `recordStep()` / `finishTest()` / `writeReport()`
|
||
- 报告目录:`runtime/test-reports/`(文件名含时间戳,如 `wallet-register-bet-win-20260515-160530.json` 与同名 `.md`)
|
||
- Markdown 表格示例列:用例名 | uid | round_id | biz_id 列表 | 结果 | 最终余额(deposit/withdraw/b)
|
||
|
||
### 2. 改造现有 Feature 测试
|
||
在 [tests/Feature/WalletRegisterBetWinTest.php](tests/Feature/WalletRegisterBetWinTest.php) 中:
|
||
- `setUp()`:初始化 reporter;若存在 `WALLET_TEST_UID` 则使用该固定 uid(否则继续随机)。
|
||
- 每个 `test*` 开始:创建 `WalletTestRunContext` 并记录 uid/round_id/biz_id。
|
||
- `postJson()` / `wallet()`:成功后把 `code`、关键 `data`、查询余额写入 `steps`。
|
||
- `tearDown()`:标记 pass/fail,调用 `writeReport()`;**向 STDOUT 打印一行摘要**(PHPUnit 控制台可见),例如:
|
||
- `[WalletTest] testRegisterBetWinFlow uid=90012345 round=r_... bet=bet_... => PASS`
|
||
|
||
失败时 assertion message 附带 context 摘要,便于一眼定位用户。
|
||
|
||
### 3. 配置与文档
|
||
- [phpunit.xml](phpunit.xml) 增加可选 env:
|
||
- `WALLET_TEST_UID`(空=随机)
|
||
- `WALLET_TEST_REPORT_DIR`(默认 `runtime/test-reports`)
|
||
- `WALLET_TEST_VERBOSE`(`1` 时打印每步明细)
|
||
- 更新 [doc/register-bet-win-test.md](doc/register-bet-win-test.md) §7:
|
||
- 报告路径说明
|
||
- 固定 uid 复现示例:`WALLET_TEST_UID=90012345 docker compose exec ... phpunit ...`
|
||
|
||
### 4. 执行验证
|
||
容器内执行:
|
||
```bash
|
||
docker compose exec -T -w /app/www/ray/slot-wallet php82 php vendor/bin/phpunit --filter WalletRegisterBetWinTest
|
||
```
|
||
验收:
|
||
- 控制台出现每个用例的 `uid` 摘要行
|
||
- `runtime/test-reports/` 生成 `.json` + `.md`
|
||
- 测试仍全部通过(3 tests)
|
||
|
||
## 报告结构示意
|
||
```mermaid
|
||
flowchart LR
|
||
testCase[WalletRegisterBetWinTest] --> context[WalletTestRunContext]
|
||
context --> reporter[WalletTestReporter]
|
||
reporter --> stdout[ConsoleSummary]
|
||
reporter --> jsonFile[runtime/test-reports/*.json]
|
||
reporter --> mdFile[runtime/test-reports/*.md]
|
||
```
|
||
|
||
## 不在本阶段做的(可选后续)
|
||
- HTML 可视化报告、CI artifact 上传
|
||
- DB 直连断言(wallet_log / wallet_fund_lot) |