在使用Postman进行接口测试过程中,部分接口的请求参数会进行MD5加密的签名校验。
签名规则
请求参数按照ASCII码从小到大排序,追加秘钥,再进行MD5加密得到签名值sign
。具体步骤如下:
首先,构造待签名字符串。待签名字符的生成规则如下:
1. 请求参数都按照名称ASCII码,升序排列(参数名称不允许相同)
2. 如果参数值带有中文, 需要制定字符集编码为UTF-8
3. 如果参数值为空,那么该参数不参与签名
4. 秘钥作为最后一个参数, 参数名为:key 将请求参数按上述顺序用&
拼接。
然后,用MD5算法,对待签名字符串进行加密, 生成的签名数据(32位小写字符), 即是参数中sign
的值。
在Postman中pre-request script的具体实现
- 设置环境变量
key
和sign
key
值是秘钥;sign
值随意设置。 - 请求参数设置中,引用
sign
值 - Pre-request-Script中写MD5加密签名规则的脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
console.log(request.data); keys = Object.keys(request.data).sort() //请求参数名按照ASCII码升序排序 //拼接待签名字符串 var str = [] for (var p = 0; p < keys.length; p++) { if(keys[p] == "sign" || request.data[keys[p]] === ""){ // "==" ==宽松相等,隐性类型转换,值相等,返回true; "===" 严格相等,值和类型都相等,返回true continue; } str.push(keys[p] + "=" + request.data[keys[p]]); } str.push('key=' + pm.environment.get("key")) var sign = str.join("&") //MD5加密签名规格,并赋值给环境变量`sign` pm.environment.unset("sign"); pm.environment.set("sign", CryptoJS.MD5(sign).toString()); |
注意 在单个请求的Pre-request-Script中添加脚本,脚本只对该请求参数生效。 如果,在一个Collection或Folder中的所有请求的参数的处理相同,可以在Collection或Folder的Pre-request-Script中添加脚本。