组合重放使用教程

文档版本:20260729

文档当前版本对应的APP版本:

  • iOS:>= 3.13
  • Android: >= 1.2.0

组合重放(Combo Replay)可以把多个 HTTP/HTTPS 请求编排成一条「流程」,按依赖关系自动串行或并行执行。适合联调接口、回归测试、批量验证同一 API 的不同入参等场景。

ApiCatcher | 组合重放使用场景

一、功能概览

能力说明
多请求编排从抓包历史选择请求,在画布上组合
同 API 多节点同一接口可添加多次,每个节点独立预设参数
依赖关系控制执行顺序(如先登录再调业务接口)
依赖注入把上游响应的 token 等自动填入下游请求
表达式注入动态生成时间戳、UUID,或使用全局变量
手动执行一键重放,查看每个节点的请求/响应详情
定时任务按 Cron 或自定义间隔自动执行

二、快速上手

步骤 1:先抓包

组合重放的请求来自抓包历史。请先用 App 正常抓取一批 HTTP/HTTPS 请求(WebSocket 请求不能添加)。

步骤 2:创建规则

  1. 进入 组合重放 列表
  2. 点击 + 添加组合重放规则
  3. 填写规则名称(必填,默认类似 Combo Replay 260729
  4. 点击右下角 + 添加请求到画布
  5. 在列表中选择需要的请求

ApiCatcher | 创建组合重放规则步骤

步骤 3:执行

  1. 保存规则(编辑页右上角 ✓)
  2. 在列表中 点击规则名 进入执行页
  3. 点击 执行重放

执行完成后,节点会显示成功/失败状态;此时点击节点可查看详情。

ApiCatcher | 执行组合重放规则

三、规则管理

3.1 列表信息

每条规则卡片显示:

  • 规则名称
  • 节点数量
  • 路径预览(最多 3 个)
  • 依赖数量、参数映射数量
  • 最近更新时间

3.2 创建 / 编辑 / 删除

操作方式
创建列表页导航栏 +
编辑左滑 → 编辑
删除左滑 → 删除
保存编辑页右上角

规则保存在本地,卸载 App 或清除数据会丢失。

ApiCatcher | 组合重放规则列表

四、编辑组合规则

4.1 添加请求

  • 点击页面右下角 + 悬浮按钮
  • 支持搜索 URL / Method
  • 可按 Session、Host、类型、状态码筛选

同一 API 可多次添加:例如添加 3 个 /api/order 节点,分别测试正常单、边界值、异常参数。

4.2 节点菜单

点击节点弹出菜单:

菜单作用
设置依赖进入连线模式,再点击目标节点建立依赖
预设参数修改请求的 Query / Header / Body(也可以在执行页面修改,但执行页面修改为临时修改)
依赖注入配置上游响应 → 下游请求的参数映射
删除删除节点及相关依赖、映射

拖动节点 可调整位置;点击空白处 取消选中或退出连线模式。

ApiCatcher | 创建依赖和设置依赖注入

五、预设参数

用于在 编辑规则阶段 为每个节点固定测试数据,尤其适合「同 API、不同入参」的场景。

5.1 操作步骤

  1. 点击节点 → 预设参数
  2. 分别编辑 查询参数 / 请求头 / 请求体
  3. 全部改完后,点击预设参数 Sheet 右上角 保存到规则

5.2 与执行页「修改请求」的区别

预设参数(编辑页)修改请求(执行页)
入口节点菜单 → 预设参数执行页点击节点
持久化写入规则,下次还在仅本次执行,不写回规则
用途固定测试 case临时微调再跑

5.3 典型用法:同 API 多场景

节点 A: POST /api/login     → body: 正常账号
节点 B: POST /api/login     → body: 密码错误
节点 C: POST /api/login     → body: 空密码
(三个节点无依赖 → 并行执行)

5.4 支持表达式注入

见:【八、表达式注入】

ApiCatcher | 预设参数

六、依赖关系

6.1 含义

连线 A → B 表示:A 依赖 BB 先执行,A 后执行

箭头从 下游(A) 指向 上游(B)

6.2 建立依赖

  1. 点击 下游节点设置依赖
  2. 顶部出现蓝色提示:「点击目标节点建立依赖」
  3. 点击 上游节点
  4. 出现连线

6.3 限制

  • 不能重复建立同一条依赖
  • 不能形成 环路
  • 删除连线会同时删除相关的 参数映射

6.4 执行顺序示意

        ┌─ 节点 B ─┐
节点 A ─┤          ├─ 并行(同层)
        └─ 节点 C ─┘
              ↓
           节点 D(等 A、C 都成功后再执行)
  • 同一层(无相互依赖):并行执行
  • 不同层(有依赖关系):串行执行,上一层全部成功后才执行下一层
  • 任一层有失败:后续所有节点标记为 已跳过

七、依赖注入(参数映射)

用于把上游响应里的 token、userId 等,自动填入下游请求。

7.1 前提

目标节点必须 至少有一条上游依赖,否则会提示「无上游节点,请先建立依赖关系」。

7.2 配置步骤

  1. 点击 下游节点依赖注入
  2. 点击 添加映射,配置:
配置项说明示例
来源节点从哪个上游取响应登录节点
从上游响应提取响应头 / 响应体 JSON 路径data.token
注入到请求请求头 / 查询参数 / 请求体请求头 Authorization
可选前缀注入值前拼接的字符串Bearer
  1. 保存映射

ApiCatcher | 依赖注入

7.3 经典场景:登录 + 带 Token 请求

[登录 POST /login] ──→ [获取用户信息 GET /user/profile]
         │                        ↑
    响应: data.token      Authorization = Bearer ${注入的 token}
  1. 添加两个请求
  2. GET /user/profile设置依赖 → 点击 POST /login
  3. 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. 开头的表达式,即为全局变量。

配置方式(执行页):

  1. 规则中任意节点使用了 ${variableName} 表达式
  2. 执行页状态栏右侧会出现 🌐 按钮
  3. 点击后填写各变量的值
  4. 保存后 随规则持久化(删除规则时一并清除)

预设参数、执行页「修改请求」均支持表达式语法;实际替换发生在点击「执行重放」时

8.3 组合示例

Header:  X-Request-Id: ${method.uuid()}
Query:   ts=${method.timestamp()}
Body:    {"token": "${token}", "userId": "123"}

执行前在 🌐 中填写 token 的实际值即可。

ApiCatcher | 表达式注入

九、执行页

9.1 界面

ApiCatcher | 执行页面

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 /loginPOST /order 依赖 GET /user
  • GET /userPOST /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} → 执行页 🌐 填写
临时改参数再跑执行页点节点 → 修改请求
看某次请求详情执行后点节点
重新跑重置 → 再 执行重放