組合重放使用教程

文件版本: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} → 執行頁 🌐 填寫
暫時改參數再跑執行頁點節點 → 修改請求
看某次請求詳情執行後點節點
重新跑重置 → 再 執行重放