2020年9月25日 09:45 by wst
web开发当测试带签名的sanic接口时,因为要生成签名,都是用代码测试的。
麻烦的地方在于,还要写测试代码。postman不能生成签名吗?
经过搜索,发现postman是可以生成签名的。脚本可以写在Pre-request Script里。如图:
签名的验证是通过header中的timestamp和token字段进行验证的。
完整的代码如下:
//签名Key
const SIGN_KEY = "xxxxxxxxxx";
// GET请求生成签名
function gen_get_sign(timestamp) {
// 获取GET参数
query_params = pm.request.url.query.all();
// 根据key值升序排列
query_params.sort(function(obj1,obj2) {
var value1 = obj1['key'];
var value2 = obj2['key'];
if (value1 < value2 ) {
return -1;
} else if (value1 > value2 ) {
return 1;
} else {
return 0;
}});
// 拼接签名字符串
let sign_text = "";
for (let param of query_params){
sign_text += (param["key"]+ "="+param["value"]+"&");
}
sign_text += ("timestamp=" + timestamp + "&" + SIGN_KEY);
// 生成签名
sign = CryptoJS.MD5(sign_text).toString();
return sign;
}
// POST 请求生成签名
function gen_post_sign(timestamp) {
requst_body = pm.request.body;
sign_text = "";
if(!requst_body.isEmpty() && pm.request.body.mode == "raw"){
sign_text = requst_body;
}
sign_text += ("×tamp=" + timestamp + "&" + SIGN_KEY);
sign = CryptoJS.MD5(sign_text).toString();
return sign;
}
//生成时间戳
let timestamp = Math.floor(+new Date() / 1000);
// 生成签名
let token = ""
if(pm.request.method=='POST') {
token = gen_post_sign(timestamp);
} else if(pm.request.method=='GET') {
token = gen_get_sign(timestamp)
} else {
console.log("没找到["+ pm.request.method + "]请求方式的签名算法")
}
//设置请求头,添加时间戳和签名
pm.request.headers.add({
key: "timestamp",
value: timestamp
})
pm.request.headers.add({
key: "token",
value: token
})
如有其他问题,请留言!