測試實踐——接口測試 Postman 發送請求,參數排序后實現 MD5 加密簽名規則


工作中自我使用

在使用 Postman 進行接口測試過程中,部分接口的請求參數會進行 MD5 加密的簽名校驗。

簽名規則

請求參數按照 ASCII 碼從小到大排序,追加秘鑰,再進行 MD5 加密得到簽名值sign。具體步驟如下:
首先,構造待簽名字符串。待簽名字符的生成規則如下:

  1. 請求參數都按照名稱 ASCII 碼,升序排列 (參數名稱不允許相同)
  2. 如果參數值帶有中文, 需要制定字符集編碼為 UTF-8
  3. 如果參數值為空,那么該參數不參與簽名
  4. 秘鑰作為最后一個參數, 參數名為:key 將請求參數按上述順序用&拼接。 然后,用 MD5 算法,對待簽名字符串進行加密, 生成的簽名數據(32 位小寫字符), 即是參數中sign的值。

在 Postman 中 pre-request script 的具體實現

  1. 設置環境變量keysign key值是秘鑰;sign值隨意設置。

     

     

  2. 請求參數設置中,引用sign

     

     

  1. Pre-request-Script 中寫 MD5 加密簽名規則的腳本
  2. //獲取3個全部變量
    appId = pm.environment.get("zx_appId"); 
    file_sign1 = pm.environment.get("file_sign");
    securityKey = pm.environment.get("zx_securityKey");
    
    var params = request.data; //獲取接口入參
    params["securityKey"] = securityKey; //添加參數
    keys = Object.keys(params).sort() //請求參數名按照ASCII碼升序排序
    
    //拼接待簽名字符串
    var str = []
    for (var p = 0; p < keys.length; p++) { 
        if(keys[p] == "sign" || request.data[keys[p]] === ""){ // "==" ==寬松相等,隱性類型轉換,值相等,返回true; "===" 嚴格相等,值和類型都相等,返回true
            continue;
        }
        if(keys[p] == "appId"){
            str.push(keys[p] + "=" + appId);
        } else if(keys[p] == "file"){
            str.push(keys[p] + "=" + file_sign1);
        } else if(keys[p] == "securityKey"){
            str.push(keys[p] + "=" + securityKey);
        } else {
            str.push(keys[p] + "=" + request.data[keys[p]]);
        }
    }
    var sign = str.join("&")  
    
    //MD5加密簽名規格,並賦值給環境變量`sign`
    pm.environment.unset("sign");
    pm.environment.set("sign", CryptoJS.MD5(sign).toString());
    console.log(sign); // 看日志

     

注意
在單個請求的 Pre-request-Script 中添加腳本,腳本只對該請求參數生效。

 


如果,在一個 Collection 或 Folder 中的所有請求的參數的處理相同,可以在 Collection 或 Folder 的 Pre-request-Script 中添加腳本。

 

最后說:

我可以直接跑結果的,如果使用有錯誤,可以打日志:

console.log(sign);

日志框快捷鍵:ctrl+alt+c 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM