先上最后结果:
// 获取 Query 参数对象
let queryParams = pm.request.url.query;
let appKey = pm.globals.get("appKey");
let random = parseInt(Math.random() * 32769 + 32768, 10);
// console.log('random', random);
let timestamp = new Date().getTime();
let signStr = 'appKey=' + appKey + '×tamp=' + timestamp + '&random=' + random;
// console.log('signStr', signStr);
let sign = CryptoJS.MD5(signStr).toString();
queryParams.upsert({
key: 'sign',
value: sign,
});
queryParams.add({
key: 'random',
value: random.toString(),
});
queryParams.add({
key: 'timestamp',
value: timestamp.toString(),
});
//console.log('开始打印参数-----------》')
// 遍历整个 query
// queryParams.each((item) => {
// console.log(item.key); // 输出参数名
// console.log(item.value); // 输出参数值
// });
上面的脚本就是给请求加上三个参数:random,sign,timestamp。
第一个坑:
全局参数设置的mock值获取的问题:
参数值设置
参数值获取
有意思的地方来了:请求头里面的数据是正确的,但是前置脚本里面获取的是mock数据的表达式,看下面的两个图:
上面的问题我也不知道是什么原因?有知道的可以帮我解释下,我最后的解决方案就是在前置脚本里面直接获取timestamp这个参数的数据,不用mock的动态值。
第二个坑:
queryParams.upsert({
key: 'sign',
value: sign,
});
queryParams.add({
key: 'sign',
value: sign,
});
上面这两个方法里面的value必须是转换成字符串才能在请求头里面出现,否则你能在脚本里面打印出来,但是在请求头里面看不到。
到此结束!!!