使用Postman的Pre-request Script自动生成签名

后端代码一般都在网关里设置了签名算法,访问接口时,需要传签名参数通过网关才能访问这些接口。在使用postman进行接口测试时,可以使用Pre-request Script编写js代码完成签名算法,进而完成接口的访问。

下面举个算法签名的例子,请求是GET方式,需要四个参数:timestamp、sign、token、userId。

这里设置了全局变量,通过{{name}}就可以取到值,可以在Pre-request Script通过代码postman.setGlobalVariable(name, value)设置。

1. 签名算法

签名算法很简单:将timestamp、sign、userId这三个参数组合成字符串,对字符串进行MD5加密。将加密后的值作为sign参数的值传入接口就可以了。具体代码如下:

//全局变量:设置时间戳参数 
postman.setGlobalVariable("timestamp", new Date().getTime().toString());
//get中的参数
var queryParam = pm.request.url.query.members;  

//数组参数转为map参数
var param ={};
for (var item in queryParam){
         param[queryParam[item].key] = postman.getGlobalVariable(queryParam[item].key) == null ?  queryParam[item].value : postman.getGlobalVariable(queryParam[item].key);
}

//移除参数sign
delete param["sign"];

//param排序
paramSorted = objSort(param);
console.log("paramSorted:==",paramSorted);
//生成签名
var sign = "";
for (let key in paramSorted){
    sign += key+"="+paramSorted[key]+"&";
}
console.log("sign:==",sign);
var md5Str =CryptoJS.MD5(sign);
postman.setGlobalVariable("sign", md5Str.toString(CryptoJS.enc.Hex).toUpperCase());

//排序方法
function objSort(obj)
{
    let keys = Object.keys(obj).sort();
    let arr = {};
    for (let i in keys) {
        arr[keys[i]] = obj[keys[i]];
    }
    return arr;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章