组合重放使用教程
文档版本:20260729
文档当前版本对应的APP版本:
- iOS:>= 3.13
- Android: >= 1.2.0
组合重放(Combo Replay)可以把多个 HTTP/HTTPS 请求编排成一条「流程」,按依赖关系自动串行或并行执行。适合联调接口、回归测试、批量验证同一 API 的不同入参等场景。

一、功能概览
| 能力 | 说明 |
|---|---|
| 多请求编排 | 从抓包历史选择请求,在画布上组合 |
| 同 API 多节点 | 同一接口可添加多次,每个节点独立预设参数 |
| 依赖关系 | 控制执行顺序(如先登录再调业务接口) |
| 依赖注入 | 把上游响应的 token 等自动填入下游请求 |
| 表达式注入 | 动态生成时间戳、UUID,或使用全局变量 |
| 手动执行 | 一键重放,查看每个节点的请求/响应详情 |
| 定时任务 | 按 Cron 或自定义间隔自动执行 |
二、快速上手
步骤 1:先抓包
组合重放的请求来自抓包历史。请先用 App 正常抓取一批 HTTP/HTTPS 请求(WebSocket 请求不能添加)。
步骤 2:创建规则
- 进入 组合重放 列表
- 点击 + 添加组合重放规则
- 填写规则名称(必填,默认类似
Combo Replay 260729) - 点击右下角 + 添加请求到画布
- 在列表中选择需要的请求

步骤 3:执行
- 保存规则(编辑页右上角 ✓)
- 在列表中 点击规则名 进入执行页
- 点击 执行重放
执行完成后,节点会显示成功/失败状态;此时点击节点可查看详情。

三、规则管理
3.1 列表信息
每条规则卡片显示:
- 规则名称
- 节点数量
- 路径预览(最多 3 个)
- 依赖数量、参数映射数量
- 最近更新时间
3.2 创建 / 编辑 / 删除
| 操作 | 方式 |
|---|---|
| 创建 | 列表页导航栏 + |
| 编辑 | 左滑 → 编辑 |
| 删除 | 左滑 → 删除 |
| 保存 | 编辑页右上角 ✓ |
规则保存在本地,卸载 App 或清除数据会丢失。

四、编辑组合规则
4.1 添加请求
- 点击页面右下角 + 悬浮按钮
- 支持搜索 URL / Method
- 可按 Session、Host、类型、状态码筛选
同一 API 可多次添加:例如添加 3 个 /api/order 节点,分别测试正常单、边界值、异常参数。
4.2 节点菜单
点击节点弹出菜单:
| 菜单 | 作用 |
|---|---|
| 设置依赖 | 进入连线模式,再点击目标节点建立依赖 |
| 预设参数 | 修改请求的 Query / Header / Body(也可以在执行页面修改,但执行页面修改为临时修改) |
| 依赖注入 | 配置上游响应 → 下游请求的参数映射 |
| 删除 | 删除节点及相关依赖、映射 |
拖动节点 可调整位置;点击空白处 取消选中或退出连线模式。

五、预设参数
用于在 编辑规则阶段 为每个节点固定测试数据,尤其适合「同 API、不同入参」的场景。
5.1 操作步骤
- 点击节点 → 预设参数
- 分别编辑 查询参数 / 请求头 / 请求体
- 全部改完后,点击预设参数 Sheet 右上角 ✓ 保存到规则
5.2 与执行页「修改请求」的区别
| 预设参数(编辑页) | 修改请求(执行页) | |
|---|---|---|
| 入口 | 节点菜单 → 预设参数 | 执行页点击节点 |
| 持久化 | 写入规则,下次还在 | 仅本次执行,不写回规则 |
| 用途 | 固定测试 case | 临时微调再跑 |
5.3 典型用法:同 API 多场景
节点 A: POST /api/login → body: 正常账号
节点 B: POST /api/login → body: 密码错误
节点 C: POST /api/login → body: 空密码
(三个节点无依赖 → 并行执行)
5.4 支持表达式注入
见:【八、表达式注入】

六、依赖关系
6.1 含义
连线 A → B 表示:A 依赖 B,B 先执行,A 后执行。
箭头从 下游(A) 指向 上游(B)。
6.2 建立依赖
- 点击 下游节点 → 设置依赖
- 顶部出现蓝色提示:「点击目标节点建立依赖」
- 点击 上游节点
- 出现连线
6.3 限制
- 不能重复建立同一条依赖
- 不能形成 环路
- 删除连线会同时删除相关的 参数映射
6.4 执行顺序示意
┌─ 节点 B ─┐
节点 A ─┤ ├─ 并行(同层)
└─ 节点 C ─┘
↓
节点 D(等 A、C 都成功后再执行)
- 同一层(无相互依赖):并行执行
- 不同层(有依赖关系):串行执行,上一层全部成功后才执行下一层
- 任一层有失败:后续所有节点标记为 已跳过
七、依赖注入(参数映射)
用于把上游响应里的 token、userId 等,自动填入下游请求。
7.1 前提
目标节点必须 至少有一条上游依赖,否则会提示「无上游节点,请先建立依赖关系」。
7.2 配置步骤
- 点击 下游节点 → 依赖注入
- 点击 添加映射,配置:
| 配置项 | 说明 | 示例 |
|---|---|---|
| 来源节点 | 从哪个上游取响应 | 登录节点 |
| 从上游响应提取 | 响应头 / 响应体 JSON 路径 | data.token |
| 注入到请求 | 请求头 / 查询参数 / 请求体 | 请求头 Authorization |
| 可选前缀 | 注入值前拼接的字符串 | Bearer |
- 保存映射

7.3 经典场景:登录 + 带 Token 请求
[登录 POST /login] ──→ [获取用户信息 GET /user/profile]
│ ↑
响应: data.token Authorization = Bearer ${注入的 token}
- 添加两个请求
- 对
GET /user/profile→ 设置依赖 → 点击POST /login - 对
GET /user/profile→ 依赖注入:- 来源:登录节点,响应体
data.token - 目标:请求头
Authorization - 前缀:
Bearer
- 来源:登录节点,响应体
7.4 执行时的处理顺序
预设参数 / 修改请求
↓
表达式注入(${method.timestamp()} 等)
↓
依赖注入(参数映射)
↓
发送 HTTP 请求
八、表达式注入
在 请求头、查询参数、请求体 中写入 ${...} 表达式,执行时自动替换。
8.1 内置方法
| 表达式 | 替换结果 |
|---|---|
${method.timestamp()} | 当前时间戳(毫秒) |
${method.uuid()} | UUID(小写) |
${method.date()} | 日期,如 2026-07-29 |
${method.time()} | 时间,如 14:30:00 |
${method.datetime()} | 日期时间,如 2026-07-29 14:30:00 |
示例:
{
"requestId": "${method.uuid()}",
"timestamp": "${method.timestamp()}",
"date": "${method.date()}"
}
8.2 全局变量
使用 ${token}、${appId} 等非 method. 开头的表达式,即为全局变量。
配置方式(执行页):
- 规则中任意节点使用了
${variableName}表达式 - 执行页状态栏右侧会出现 🌐 按钮
- 点击后填写各变量的值
- 保存后 随规则持久化(删除规则时一并清除)
预设参数、执行页「修改请求」均支持表达式语法;实际替换发生在点击「执行重放」时。
8.3 组合示例
Header: X-Request-Id: ${method.uuid()}
Query: ts=${method.timestamp()}
Body: {"token": "${token}", "userId": "123"}
执行前在 🌐 中填写 token 的实际值即可。

九、执行页
9.1 界面

9.2 执行前
- 点击节点 → 修改请求(仅影响本次执行,不写回规则)
- 有全局变量表达式 → 点击 🌐 填写变量值
9.3 执行后
- 点击节点 → 执行详情(实际发送的请求、响应、耗时、错误信息)
- 导航栏 重置(红色):清除所有结果,可重新编辑并执行
9.4 节点状态
| 状态 | 含义 |
|---|---|
| 灰色圆圈 | 待执行 |
| 蓝色进度 | 执行中 |
| 绿色 ✓ | 成功(HTTP 2xx) |
| 红色 ✗ | 失败 |
| 橙色 − | 已跳过(上游失败) |
9.5 成功判定
HTTP 状态码 200–299 视为成功,其余视为失败。
十、典型场景手册
场景 1:并行测同一接口多种入参
POST /api/order 节点1 body: {"type":"normal"}
POST /api/order 节点2 body: {"type":"edge"}
POST /api/order 节点3 body: {"type":"invalid"}
- 不建立依赖 → 三个节点并行执行
- 各节点通过 预设参数 设置不同 body
- 执行后对比各节点结果
场景 2:登录链式调用
POST /login → GET /user → POST /order
│ ↑ ↑
└──── token 注入 Authorization ─┘
- 建立依赖:
GET /user依赖POST /login,POST /order依赖GET /user - 在
GET /user、POST /order上配置 token 映射 - 串行执行:登录 → 获取用户信息 → 下单
场景 3:动态参数 + 固定 Token
- Body 中写:
{"ts":"${method.timestamp()}","id":"${method.uuid()}"} - Header 中写:
Authorization: Bearer ${token} - 执行前在 🌐 中填写
token - 每次执行时间戳、UUID 都会自动更新
十一、常见问题
Q:添加了请求但执行页是空的?
A:编辑页需要点击 ✓ 保存规则后,再从列表进入执行页。
Q:预设参数改了,执行页没变?
A:确认编辑页已保存规则;执行页「修改请求」只影响当次执行,不会覆盖预设参数。
Q:依赖注入不生效?
A:检查:① 是否建立了依赖关系;② JSON 路径是否与样本响应一致;③ 上游节点是否执行成功;④ 表达式注入在依赖注入之前执行,注意顺序。
Q:全局变量替换为空?
A:需要在执行页点击 🌐 填写变量值并保存;未填写时替换为空字符串。
Q:为什么有的节点被跳过?
A:同层或上游节点执行失败时,后续层所有节点会被标记为「已跳过」。
Q:WebSocket 请求能添加吗?
A:不能,仅支持普通 HTTP/HTTPS 请求。
十二、操作速查表
| 我想… | 怎么做 |
|---|---|
| 新建规则 | 列表 + → 填名称 → 加请求 → ✓ |
| 同 API 测多组参数 | 多次添加同一请求 → 各节点 预设参数 |
| 控制先后顺序 | 设置依赖 → 点击上游节点 |
| 自动带 token | 依赖注入 配置映射 |
| 动态时间戳/UUID | 参数中写 ${method.timestamp()} 等 |
| 共用 token 等配置 | 写 ${token} → 执行页 🌐 填写 |
| 临时改参数再跑 | 执行页点节点 → 修改请求 |
| 看某次请求详情 | 执行后点节点 |
| 重新跑 | 重置 → 再 执行重放 |