# TapTap CLI Skill: 测试计划

管理游戏封闭测试和开放测试计划的全生命周期：创建、查状态、资格发放批次、用户资格、激活码、结束测试。

- 网页版: /v3/cli/#skill-taptap-test-plan
- Markdown: /v3/cli/skills/taptap-test-plan.md

## 摘要

| Skill ID | 分组 | 类型 | 作用域 | 主要命令数 | 确认要求 |
| --- | --- | --- | --- | --- | --- |
| taptap-test-plan | Testing | 命令调用 | 应用 | 17 | 有（创建 / 修改 / 结束 / 批次 / 资格 / 招募等写动作） |

## 行为与边界

一个游戏同时只允许有一个未结束的测试计划。测试类型分为封闭测试（CBT）和开放测试（OBT）：封闭测试需要先获得测试资格才能参与，资格通过发放批次逐批发放，配额在批次级别管理；开放测试无需资格，直接在测试计划级别配置开放平台。资格也可以通过激活码批次获取，激活码有独立过期时间。结束测试计划不可逆：当你说「先停一下」时，会先建议停下当前发放批次，只有你确认要结束整个测试后才结束。

> `test-plan end-test-plan` 是**不可逆**动作。用户说“停一下 / 暂停”时先建议 `stop-delivery-batch`，只有二次确认“结束整个测试”后才执行结束。推荐或创建测试计划前，先读取 `get-test-plan-overview`、预约量和 `app list-app-versions`；CBT 还需实时读取 `get-test-plan-policy`。

## 能力摘要

- 查测试计划状态、发放批次、资格用户明细、激活码批次。

- 创建 / 修改 / 结束封闭测试或开放测试计划。

- 发放批次管理：新建、改配额、删除未开始批次、停止发放。

- 用户资格取消与恢复、招募配置、激活码批次追加。

- 数据驱动的测试方案推荐（结合预约量与版本发布状态）。

## 你可以这样问

- 这个游戏现在有没有正在进行的测试？

- 我想开一场 CBT 或 OBT，需要先确认哪些条件？

- 我想给一批指定用户发测试资格，应该怎么做？

## 示例

```bash
taptap-cli skills read taptap-test-plan
taptap-cli schema test-plan get-test-plan-overview
taptap-cli test-plan get-test-plan-overview --dev-id <developerId> --app-id <appId>
```

## 用户可见输出边界

默认输出：有几个计划、进行中 / 已结束、封闭测试还是开放测试、配额 / 已领取 / 报名 / 激活码库存、发放批次现状、变更摘要与下一步。停止发放与结束测试的区别、可逆性必须讲清。默认**不转述** `testPlanId`/`batchId`/`qualificationId`/`serialNumberId` 等数字 ID、原始枚举值、工具载荷、原始 JSON、上游接口路径。

## 主要命令

| 命令 | 类型 | 说明 | 输入 | 输出 | 注意事项 |
| --- | --- | --- | --- | --- | --- |
| test-plan get-test-plan-overview | 只读 | 查当前游戏全部封闭测试和开放测试计划的状态、时间、配额、讨论群 | 无额外业务参数（作用域为当前游戏） | 计划列表 + 状态 + 配额概览 | 创建 / 管理前置读取；结果为准，不凭历史推断 |
| test-plan get-test-plan-policy | 只读 | 查询 CBT 当前准入、人数 / 时长上限、季度剩余次数和可用状态 | 无额外业务参数（作用域为当前游戏） | 当前 CBT policy 与剩余额度 | 创建、修改受限字段或重开 CBT 前必须实时读取 |
| test-plan get-or-create-ahead-server | 写入 | 正式服不能直接测试时，确认后获取或创建独立先行服应用 | 当前游戏上下文 | aheadAppId 与后续操作入口 | 先 dry-run 说明影响；确认后 --yes，随后用新 appId 重新读取前置状态 |
| test-plan list-delivery-batches | 只读 | 查某测试计划下全部资格发放批次（配额 / 已用 / 方式 / 时间） | 测试计划 ID | 批次列表 | 前置：已知测试计划 ID |
| test-plan list-qualified-users | 只读 | 分页查资格用户明细，支持按 user_id 精确搜索 | 测试计划 ID、分页参数 | 资格用户列表 | 前置：已知测试计划 ID |
| test-plan list-activation-code-batches | 只读 | 查激活码批次信息（ID、总量、已发放、剩余、过期时间） | 测试计划 ID | 激活码批次汇总 | 延长有效期 / 上传激活码文件只引导到页面 |
| test-plan create-test-plan | 写入 | 创建封闭测试或开放测试计划 | 名称 / 时间 / 人数 / 类型 / 付费 / 删档 | 新测试计划 | 前置无进行中计划、平台未全面开放下载；带确认卡片；创建前展示参数摘要 |
| test-plan update-test-plan | 写入 | 修改名称、人数、时间、付费 / 删档 | 测试计划 ID + 可改字段 | 更新后的计划 | 计划未结束可改；测试类型（封闭测试 / 开放测试）不可改；带确认卡片 |
| test-plan end-test-plan | 不可逆写 | 结束测试计划，所有用户无法继续游玩 | 测试计划 ID | 计划终态 | 不可逆；须先与「停止发放」区分并二次确认；带确认卡片 |
| test-plan create-delivery-batch | 写入 | 为测试计划新建资格发放批次 | 测试计划 ID、发放方式、用户 ID 列表（可选） | 新批次 | 计划进行中；指定用户批次需提供发放方式和用户 ID 列表；带确认卡片 |
| test-plan update-delivery-batch-quota | 写入 | 修改批次配额上限 | 批次 ID、新配额 | 更新后的批次 | 新配额须大于已用量；带确认卡片 |
| test-plan delete-delivery-batch | 不可逆写 | 删除未开始且未发放的批次 | 批次 ID | 批次删除 | 前置批次未开始且无已用配额；带确认卡片 |
| test-plan stop-delivery-batch | 写入 | 停止某发放批次（结束时间设为当前，不再新增资格） | 发放批次 ID | 批次停止发放 | 已有资格用户仍可游玩、可恢复；对外说"停止发放"，不说"结束测试" |
| test-plan cancel-user-qualification | 不可逆写 | 取消某用户测试资格 | 资格 ID | 资格取消 | high-risk-write；展示影响并取得明确确认后，使用稳定幂等键和 --yes |
| test-plan recover-user-qualification | 写入 | 恢复已取消 / 已退出的用户资格 | 资格 ID | 资格恢复 | 带确认卡片 |
| test-plan update-recruitment | 写入 | 开启 / 修改招募配置（开关、时间、平台、问卷链接） | 测试计划 ID + 招募配置 | 招募配置更新 | 计划未结束；停止发放不会自动关招募 |
| test-plan add-delivery-activation-code | 写入 | 将已有激活码批次追加到某发放批次 | 发放批次 ID、激活码批次 ID | 批次已挂激活码 | 前置两个 ID 均已知；带确认卡片 |

## 相关能力

- 联网测试备案 — 用户明确提到版署 / 联网测试备案时转出。

- taptap-app-edit — 直接开下载 / 发布走发版流程。
