51Testing软件测试论坛
标题:
分享Postman预处理自动生成签名参数
[打印本页]
作者:
lsekfe
时间:
2023-3-31 13:02
标题:
分享Postman预处理自动生成签名参数
很多接口会有签名参数,为了防止被恶意篡改参数,所以对所有参数用一定规则排列后+盐再MD5加密。
有些开发可能配置了在
测试
环境暂时屏蔽签名,或者用一个通用签名。但其实完全可以在不破坏系统完整性的前提下,又能很轻松的让postman根据规则自动生成签名参数来进行测试。
这2条语句可以分别获得body参数和url中的query参数。
let queryParam = pm.request.url.query.members;
let param = request.data;
let key = "xxxxxxxxxxxx"; //签名Key
try {
let json = JSON.parse(param); //序列化JSON BODY
param = json;
}catch(err){
//BODY不是JSON格式
}
//Get & 合并GET和POST参数
for (let i in queryParam){
param[queryParam
.key] = queryParam
.value;
}
//Post
//取key
var keys = [];
for (let k in param){
if (k == 'sign'){
continue;
}
keys.push(k);
}
//排序
keys.sort();
//取value
var kv = [];
for (let k of keys){
kv.push(k + '=' + encodeURIComponent(param[k])) //urlencode编码
}
//拼接
var sign = kv.join('&');
sign = sign + key;
console.log(sign);
sign = CryptoJS.MD5(sign).toString();
console.log(sign);
//设置环境变量
postman.setEnvironmentVariable("sign", sign);
PS: 不同公司、不同接口规则不同,例如不需要urlencode、不需要排序的请自行修改脚本再用{{sign}}从环境变量中取出sign值。
成功请求
这段脚本兼容GET参数、以及表单形式的BODY和JSON形式的BODY。
保持登录状态
通过设置环境变量,我们可以把登录接口返回的认证信息存起来,之后其他接口可以直接从环境变量中获取。达到保持登录状态的效果。
先在登录接口的Tests中获取token参数并放到环境变量中。
//设置token
var responeData = JSON.parse(responseBody); //把响应结果转为JSON对象
pm.environment.set("token", responeData.data.token); //从响应结果JSON对象中获取到token参数,并放到环境变量
console.log("token: " + responeData.data.b_token);
然后在业务接口的头信息中,用{{token}}方式从环境变量中获取token实际值。
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2