3.7 KiB
3.7 KiB
name, overview, todos, isProject
| name | overview | todos | isProject | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| PHPUnit 钱包链路测试 | 补齐本仓库的 PHPUnit 基建,并新增 register/bet/win 集成测试用例,默认在本地 php82 容器执行、连接真实依赖,以 HTTP 结果与余额变化作为核心断言。 |
|
false |
PHPUnit Register/Bet/Win 测试落地计划
默认口径(基于当前信息)
- 测试框架:PHPUnit(当前仓库尚无
phpunit.xml和tests/)。 - 执行环境:本地
php82容器。 - 依赖模式:默认连本地真实 MySQL/Redis(贴近联调)。
- 断言范围:默认先做 API 返回与余额变化断言;DB 深断言作为第二阶段可选扩展。
现状结论
- 缺少 PHPUnit 基建:未发现
phpunit*.xml与tests/目录。 register/bet/win入口与逻辑已具备:
实施步骤
- 补测试基建
- 在
require-dev增加phpunit/phpunit。 - 新增
phpunit.xml(定义tests/目录、bootstrap、环境变量覆盖)。 - 新增
tests/bootstrap.php(加载自动加载与测试环境初始化)。
- 新增钱包链路集成测试
- 新建测试文件:tests/Feature/WalletRegisterBetWinTest.php
- 用例覆盖:
register成功(通过wallet/update+type=register)bet成功并校验扣款后余额变化win is_end=0中间派奖仅影响待结算展示win is_end=1最终结算落账bet重复biz_id幂等win重复biz_id幂等bet/win缺round_id参数错误win非法is_end参数错误
- 测试数据与可重复执行设计
- 每个测试生成独立
uid/round_id/biz_id/trace_id(时间戳+随机后缀),避免脏数据冲突。 - 用例内封装统一请求方法(POST JSON)与响应断言助手,降低重复代码。
- 优先按顺序单线程执行此特性测试,避免并发串扰。
- 执行与验证
- 在容器内执行:
docker compose exec -T php82 php vendor/bin/phpunit --filter WalletRegisterBetWinTest - 验证输出:
- 所有用例通过
- 幂等场景无重复记账(通过返回余额不重复变化来断言)
- 第二阶段可选增强(不在首版强制)
- 增加 DB 断言(
wallet_log、wallet_fund_lot、wallet_bet_funding)与 Redis pending key 清理断言。 - 将该测试纳入 CI job(需环境可用性与测试隔离策略先达成一致)。
目标结构图
flowchart TD
testBootstrap[phpunitBootstrap] --> featureTest[WalletRegisterBetWinTest]
featureTest --> registerStep[register_update]
registerStep --> betStep[bet]
betStep --> winMidStep[win_is_end_0]
winMidStep --> winFinalStep[win_is_end_1]
winFinalStep --> idemCheck[idempotencyChecks]
idemCheck --> negativeCheck[invalidParamsChecks]