博客 / 詳情

返回

如何靈活處理參數值?Apipost自定義函數功能讓調試更簡單高效!

在開發過程中,為了更好地處理傳遞給接口的參數值,解決在調試過程中的數據處理問題,我們經常需要用到函數處理數據。

過去,我們通過預執行腳本來處理數據,先添加腳本,然後將處理後的結果再賦值給請求參數。

這種方法有一些不足:

  • 無法立即看到處理結果,必須分步驟進行,可能導致錯誤或不一致性,增加調試的難度;
  • 預執行腳本需要在接口或項目更新時進行相應維護,增加了維護的工作量。

一、Apipost自定義函數解決方案:

我們可以直接在Apipost請求參數的位置添加處理函數,並且可以實時預覽函數處理後的結果。這一改變使得整個使用流程更加高效和用户友好。

優勢:

  • 可以直接在請求參數位置添加處理函數,操作更加直觀和簡單。
  • 能夠即時看到處理函數的結果,幫助快速確認數據的正確性,減少調試時間。
  • 如果需要修改處理邏輯,只需在函數內部進行調整,無需重新編寫和執行整個腳本,降低了錯誤發生的可能性。
  • 可以根據需要快速切換不同的處理方法,不再受限於固定的腳本邏輯,提升了靈活性和應對變化的能力。
  • 團隊協作共同維護一套處理函數庫,提升團隊協作效率

我們可以利用Apipost的自定義函數對接口傳遞參數值進行處理:如:數據驗證、數據清理、編碼處理、加密和簽名、參數格式化、默認值處理等。

Apipost目前內置了以下處理函數:md5、lower、length、substr、sha、base64、unbase64、encodeURlComponent、decodeURlComponent、concat、lconcat;如果內置的函數不能滿足需求,也可以靈活擴充函數庫,滿足更多場景的需求。比如:時間戳轉換為日期,或者去除參數中的空格等。

關於Apipost自定義函數功能的介紹,我們可以通過以下視頻來了解。
此處添加視頻號視頻。

二、四大場景實戰

場景一:動態構造接口簽名

需求:構造含時間戳、隨機數、MD5簽名的鑑權參數

第一步: 在Query參數填寫參數名並進入參數值編輯欄
 title=

第二步: 值輸入框選擇"引用變量" → 選擇$timestamp獲取10位時間戳
 title=

第三步:添加函數處理 → 選擇concat輸入000,使時間戳精確到13位毫秒
 title=

第四步: 繼續添加md5加密 → 自動生成
 title=

第五步:點擊插入,生成表達式{{$telephone|concat(000)|md5}}
 title=

效果預覽

?timestamp=e382279f1e69844a19f4ada2b16122db

 title=

場景二:中文轉義參數自動化

需求:測試包含中文字符的接口進行長度限制和轉義

第一步:在Body參數值輸入框選擇"Mock數據" → 選擇$mockjs.cparagraph()生成一段中文文本
 title=

第二步: 添加函數處理 → 選擇substr輸入0-5,使中文字符限制在5位
 title=

第三步: 添加encodeURIComponent轉碼
 title=

第四步: 點擊插入,生成表達式{{$mockjs.cparagraph()|substr(0,5)|encodeURIComponent}}

效果預覽

content=%E5%8A%9E%E5%B9%B3%E8%BF%9B%E6%89%93%E5%8D%8A

 title=

場景三:金融級數據安全測試

需求:測試銀行卡號加密接口

第一步: 選擇"固定值" → 填寫6225880137700891
 title=

第二步: 繼續添加sha256加密
 title=

第三步: 最後用base64二次編碼
 title=

加密流水線
原始卡號 → sha256摘要 → base64字符串
 title=

第四步: 點擊插入,生成表達式{{'6225880137700891'|sha256|base64}}

效果預覽

key=NWFjMjBkNjc2YjMzYzc0MDJkZTRkZjlkMDUzMjg0NWNiZmJmZTJkMmQ2YTI4ZmNmZGI4NTg5YWIzZTFlNGEzZA==

 title=

場景四:電商庫存測試

需求:模擬100種SKU參數

第一步: 生成Path參數 /goods/{guid}
 title=

第二步: 選擇"Mock數據" → 選擇$mockjs.guid()隨機生成一個GUID
 title=

第三步: 添加lower函數統一小寫
 title=

第四步: 組合padEnd確保長度32位
 title=

第五步: 點擊插入,生成表達式{{$mockjs.guid()|lower|padEnd(32)}}
 title=

第六步: 自動化測試運行時自動生成:

/goods/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

 title=

三、項目級自定義函數

在Apipost"項目設置-自定義函數"中,我們可以三步構建可複用的函數庫:

第一步:創建新的處理函數

  1. 點擊"新建",命名需遵守法則:

    • 只允許字母/數字/下劃線(如timestamp_converter
    • 函數名唯一,在創建後不支持修改函數名。

     title=

  2. 植入函數代碼(測試流程):

        // 創建 Date 對象
     const date = new Date(text);
     // 檢查日期是否有效
     if (isNaN(date.getTime())) {
         return '無效的日期格式';
     }
     // 獲取時間戳(毫秒)
     const timestamp = date.getTime();
     return timestamp;

     title=

  3. 點擊"測試"按鈕,輸入2024-12-12驗證輸出1733961600000
     title=

第二步:管理現有函數

  • 批量部署:為不同業務線創建支付_簽名生成物流_單號校驗等函數
  • 操作警示:刪除函數將導致歷史用例集體癱瘓

 title=

第三步:使用自定義函數

創建自定義函數後,我們在插入動態值時,即可使用。

 title=

四、使用技巧

當我們在自定義函數中處理數字時,系統傳入的始終是字符串類型。想進行數值運算,需要先完成“類型轉化”:

// 正確姿勢
let numTimestamp = Number(text);
const date = new Date(numTimestamp);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');
return text = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;

 title=

// 錯誤示範(將導致NaN)
const date = new Date(text);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');
return text = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;

 title=

五、總結

Apipost通過三層架構重構參數處理,幫我們實現了參數處理從"體力勞動"到"智能編排"的革命。

  1. 數據層:內置200+Mock規則庫
  2. 處理層:17種函數組成的處理流水線
  3. 擴展層:JavaScript自定義函數的無限可能
user avatar hushuosha 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.