# 测试报告模板

报告保存路径：`<skill-dir>/tmp/{大奖名称}_{活动配置id}_{yyyyMMddHHmm}.md`

```
<!-- expires: {yyyy-MM-dd HH:mm:ss} -->
=== 保底抽奖完整测试报告 ===
项目: 小游戏测试
用户: {uid}（{nickname}）| market: {market}
活动: {活动名} | act_id: {act_id} | 活动中心id: {活动中心id}
活动配置id: {module}
活动入口id: {group_list[0].id}
活动时间: {start} ~ {end}
代币道具: item_id={coin.item_id} | item_type={coin.type}
苹果兑换比例: {exchange_rate}苹果 = 1代币

【用户校验】✅/❌
【活动校验】✅/❌

【抽奖明细】
第1次  {yyyy-MM-dd HH:mm:ss}  {奖品名}  花费:{price}代币  type:{type}  item_id:{item_id}  奖励数量:{num}
第2次  {yyyy-MM-dd HH:mm:ss}  {奖品名}  花费:{price}代币  type:{type}  item_id:{item_id}  奖励数量:{num}
...

【结论】共抽 N 次 | 奖池是否抽完 | 大奖保底是否触发 | 奖品是否不重复
==============================
```

## 字段说明

| 字段 | 说明 |
|------|------|
| `expires` | 写入时间 + 24小时，格式 `yyyy-MM-dd HH:mm:ss` |
| `coin.item_id` | Apollo `lottery.coin.item_id`，代币道具 ID（用于埋点 `item_id` 字段校验） |
| `coin.type` | Apollo `lottery.coin.type`，代币道具类型（用于埋点 `item_type` 字段校验） |
| `exchange_rate` | Apollo `lottery.exchange_rate`，兑换1代币所需的苹果数量 |
| `price` | 来自 `do_cost[N-1].price`，本次花费代币数 |
| `type` | 奖品的 type 字段（来自抽奖接口返回） |
| `item_id` | 奖品的 item_id（0 表示无实物道具） |
| `num` | 奖品数量（来自抽奖接口返回） |
| `活动中心id` | Step 2a 后台查询到的顶层活动id（用户提供的id，如 886） |
| `活动配置id` | Apollo 查询时使用的 `module` 字段值，如 `guaranteed_turntable_30` |
| `活动入口id` | 来自 Step 2a `group_list[0].id` |
| 奖池是否抽完 | 实际抽奖次数 = 总次数 则为是 |
| 大奖保底是否触发 | 根据 Apollo config 中 big_reward 判断 |
