在日常開發過程中,經常有用户在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,無需額外配置
方案 二:手動綁定 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 都能通過腳本一站式實現自動化,無論你是剛入門的接口測試者,還是資深後端開發,掌握這些腳本技巧,都能讓你在開發工作中實現事半功倍的效果。