在日常開發過程中,經常有用户在Apipost社羣中會提到一些進階問題,比如:如何動態修改參數?如何實現接口簽名驗證?如何調試帶登錄狀態的接口……為了幫助大家更高效地完成接口驗證、調試與測試,本期我們結合真實開發實踐,總結了 7 大高頻腳本使用場景 —— 從動態參數修改、自動簽名、登錄態維護,到加密處理、性能壓測、OAuth 授權獲取,讓你的接口調試過程 更智能、更自動、更省心。

Q1:如何在發送前動態修改 Query、Body、Header 參數?

應用場景:臨時切換環境參數、關閉某個冗餘參數、批量修改參數值,不想手動編輯。
解決方法:利用「預執行腳本」的apt系列方法,動態操作參數。
核心腳本語法(直接複製使用)

//1. 新增/修改Query參數(URL中拼接的參數)
apt.setRequestQuery("key", "value"); 
//2. 刪除指定Query參數
apt.removeRequestQuery("key"); 
//3. 新增/修改Header參數
apt.setRequestHeader("key","value"); 
//4. 刪除指定Header參數
apt.removeRequestHeader("key"); 
//5. 新增/修改Body參數(form-data/raw均支持)
apt.setRequestBody("key", "value"); 
//6. 刪除指定Body參數
apt.removeRequestBody("key"); 
//7. 重置整個Body(僅適用於raw類型,如JSON)
apt.setRequestBody({"key1":"value1","key2":"value2"});

實操示例: 

臨時給請求添加 version=v2的 Query 參數,同時刪除 Header 中的 cache-control

// 預執行腳本中添加
apt.setRequestQuery("version", "v2");`
apt.removeRequestHeader("cache-control");

如何搞定接口簽名驗證、登錄令牌刷新、動態參數生成等_字符串


Q2:如何先發送前置請求(如獲取臨時密鑰),再執行當前接口?

應用場景當前接口需要用到另一個接口返回的secret參數,想讓 Apipost 自動完成 “前置請求→獲取數據→當前請求” 流程。
解決方法預執行腳本中用$.ajax發送前置請求,結果存入變量後引用。
腳本示例(分同步 / 異步)
1. 異步調用

$.ajax({method: "GET", // 請求方法(GET/POST等)
url:"https://xxx.com/get-secret", // 前置接口地址
  success: function(response) {
// 成功後將結果存入環境變量(後續接口可直接引用{{secret}})
    apt.variables.set("secret", response.data.secret);
console.log("前置請求成功,secret已保存");
  }
});

2.同步調用 異步可能導致前置請求未完成就發送當前接口,用await轉為同步:

// 關鍵:添加await,確保前置請求完成後再執行後續邏輯
await $.ajax({
method: "GET",
url: "https://xxx.com/get-secret",
success:function(response) {
    apt.variables.set("secret", response.data.secret);
  }
});

注意:若前置接口為 application/json 類型,需用JSON.stringify 處理參數:

await $.ajax({
method:"POST",
url:"https://xxx.com/get-secret",
"content-type":"application/json",
data: JSON.stringify({"appId"
:"123"}),// 必須轉為字符串
success:function(response) {
    apt.variables.set("secret", response.data.secret);
  }
});


Q3:如何調試需要登錄的接口(Cookie/Session 認證)?

應用場景調試用户收藏列表、個人信息等接口時,需要模擬登錄狀態,否則返回 “未授權”。
解決方法兩種方案,按需選擇!

方案 一開啓全局 Cookie(簡單高效)

  • 點擊 Apipost 右下角「Cookie 管理器」;
  • 打開「全局 Cookie」開關;
  • 先發送登錄接口,後續所有接口會自動共享登錄 Cookie,無需額外配置

如何搞定接口簽名驗證、登錄令牌刷新、動態參數生成等_字符串_02

方案 二:手動綁定 Cookie 到變量(關閉全局 Cookie 時使用)

  • 登錄接口後執行腳本:
// 將登錄返回的PHPSESSID(SessionID)存入環境變量
apt.variables.set("sessionId",response.cookies["PHPSESSID"]);
  • 目標接口 Header 配置:
  • 添加 Header 參數:Cookie
  • 參數值:PHPSESSID={{sessionId}}其他語言可能為 JSESSIONID 等,需看後端定義)。

    小貼士若需所有接口共享該 Cookie,可在「項目設置→全局 Header」中添加,無需逐個接口配置。

Q4:如何對參數進行 MD5/AES/base64 加解密?

應用場景接口要求參數加密傳輸(如密碼用 AES 加密,簽名用 MD5),Apipost 能直接實現嗎?
解決方法內置 CryptoJS 工具,支持多種加解密,直接調用即可。
常用加解密腳本(直接複製)

加密類型

腳本示例

MD5 加密

CryptoJS.MD5("待加密字符串").toString();

SHA256 加密

CryptoJS.SHA256("待加密字符串").toString();

base64 加密

CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse("待加密字符串"));

base64 解密

CryptoJS.enc.Base64.parse("待解密字符串").toString(CryptoJS.enc.Utf8);

AES 簡單加密

CryptoJS.AES.encrypt("待加密字符串", "秘鑰").toString();

AES 簡單解密

CryptoJS.AES.decrypt("待解密字符串", "秘鑰").toString(CryptoJS.enc.Utf8);

自定義 AES 加解密(支持模式 / 填充,常用!)

// 配置密鑰和偏移量(需與後端一致)
const key = CryptoJS.enc.Utf8.parse("16位密鑰");// 
如"abcdefghijklmnop"
const iv = CryptoJS.enc.Utf8.parse("16位偏移量"); // 
如"1234567890abcdef"
// 加密函數
function encrypt(word) {
const srcs = CryptoJS.enc.Utf8.parse(word);
return CryptoJS.AES.encrypt(srcs, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,// 加密模式(後端一致)
    padding: CryptoJS.pad.Pkcs7// 填充方式(後端一致)
  }).ciphertext.toString().toUpperCase();
}
// 解密函數
function decrypt(word) {
const encryptedHexStr = CryptoJS.enc.Hex.parse(word);
const srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
const decrypt = CryptoJS.AES.decrypt(srcs, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  });
return decrypt.toString(CryptoJS.enc.Utf8);}
// 調用示例:加密密碼
const password = encrypt("123456");
apt.setRequestBody("password", password);


Q5:接口要求參數簽名(sign)驗證,怎麼自動計算?


應用場景接口要求按規則拼接參數並 MD5 加密生成sign,如appid+param1+param2+salt+secretKey,手動拼接容易出錯。
解決方法:預執行腳本中自動拼接、加密、添加 sign 參數。

腳本示例(按實際簽名規則修改)

// 1. 獲取當前接口的Query參數(也可獲取Body參數:request.request_bodys)
const query = request.request_querys;
const param1 = query.param1;
const param2 = query.param2;
// 2. 從環境變量中獲取固定參數(提前在環境變量中配置APPID和SECRET_KEY)
const appid = apt.environment.get("APPID");
const secretKey = apt.encironment.get("SECRET_KEY");
// 3. 生成隨機salt(11111-65536之間)
const salt = parseInt(Math.random() * 54425 + 11111, 10).
toString();
// 4. 按規則拼接字符串
const signStr = appid + param1 + param2 + salt + secretKey;
// 5. MD5加密生成sign
const sign = CryptoJS.MD5(signStr).toString();
// 6. 將salt和sign添加到Query參數中
apt.setRequestQuery("salt", salt);
apt.setRequestQuery("sign", sign);

操作前提 :提前在「環境變量」中配置APPID 和SECRET_KEY,避免硬編碼泄露。

Q6:如何用Apipost 進行接口壓測?

場景需要測試接口的併發能力、響應時間,判斷性能是否達標。
解決方法:使用 Apipost 內置壓測引擎(支持萬級併發)。
壓測操作步驟:
1. 打開需要壓測的接口,點擊頂部「一鍵壓測」按鈕
2. 配置壓測參數

  • 併發數:同時發送請求的數量(建議從 10/100/500 逐步增加)
  • 輪次:每個併發發送的請求次數
  • 其他:超時時間、是否跟隨 302 跳轉等

3. 點擊「開始壓測」,等待完成後查看結果

壓測結果關鍵指標解讀:

指標

含義

參考價值

每秒請求數(QPS)

每秒平均處理請求數

核心性能指標,越高越好

平均響應時間

所有請求的平均耗時(毫秒)

越低越好,需結合業務閾值

錯誤率

失敗請求佔比


95% 響應時間

95% 的請求完成時間

反映大多數用户的體驗

注意事項:

  • 壓測時關閉其他佔用網絡 / CPU 的程序,避免干擾結果;
  • 併發數並非越大越好,超過服務器承載會導致錯誤率飆升,需逐步測試。

Q7:如何通過OAuth2.0 獲取 GitHub 等平台的登錄 token?

場景調用 GitHub API、企業內部 OAuth2.0 認證接口時,需要先獲取 access_token 才能訪問。
解決方法:Apipost 支持 OAuth2.0 認證,以 GitHub 為例演示。
操作步驟:
1.創建 GitHub OAuth 應用

  • 錄 GitHub→右上角頭像→Settings→Developer settings→New OAuth App;
  • 填寫信息:Application name(任意)、Homepage URL(http://localhost)、Authorization callback URL(http://localhost);
  • 註冊後獲取「Client ID」和「Client Secret」。

2.Apipost中配置 OAuth2.0

  • 接口中添加 Header→選擇「認證→OAuth 2.0」;
  • 填寫配置:
    a.Callback URL:http://localhost(與 GitHub 一致);
    b.Auth URL:https://github.com/login/oauth/authorize;
    c.Access Token URL:https://github.com/login/oauth/access_token;
    d.Client ID/Client Secret:GitHub 獲取的信息;
  • 點擊「獲取 token」,Apipost 會打開 GitHub 登錄頁面,授權後自動獲取 token 並填入。

3.發送請求

token 自動添加到 Header 的Authorization: Bearer {token}中,直接發送即可訪問接口。 

注意:若不想共享 token 給協作成員,可將 token 存入環境變量,在 token 欄填寫{{github_token}}

以上內容幾乎覆蓋了接口調試的所有核心需求:從 參數靈活性(動態修改) 到 安全驗證(簽名、加密),從 狀態保持(Cookie/Token) 到 性能評估(壓測),再到 第三方授權(OAuth2.0),Apipost 都能通過腳本一站式實現自動化,無論你是剛入門的接口測試者,還是資深後端開發,掌握這些腳本技巧,都能讓你在開發工作中實現事半功倍的效果。