Postman预处理添加默认请求参数及自动生成签名参数(sign)

tech2022-09-19  101

Postman前置脚本


1. 前置脚本请求中保护参数处理

postman请求中使用的{{}}格式参数,在前置脚本中默认没有进行替换,可以使用pm.variables.replaceIn(),比如pm.variables.replaceIn("{{$timestamp}}")

2. body不可变

postman中body不可变,在前置脚本中无法修改body

3. 实现功能

添加默认参数

参数值处理

添加sign签名

设置环境

var timestamp = Math.round(new Date().getTime() / 1000); //pm.environment.set("timestamp", timestamp); //设置测试环境与正式环境host和app key var isTest = pm.collectionVariables.get("isTest"); var app_key = pm.collectionVariables.get("app_key_release"); var app_secret = pm.collectionVariables.get("app_secret_release"); var baseURL = pm.collectionVariables.get("baseURL_release"); if(isTest == "true"){ app_key = pm.collectionVariables.get("app_key_debug"); app_secret = pm.collectionVariables.get("app_secret_debug"); baseURL = pm.collectionVariables.get("baseURL_debug"); } if(baseURL != pm.collectionVariables.get("baseURL")){ pm.collectionVariables.set("baseURL", baseURL); } commpany_id = pm.collectionVariables.get("company_id"); imei = pm.collectionVariables.get("imei"); language = pm.collectionVariables.get("language"); //请求参数变量替换 pm.request.url.query.map((item)=>{ item.value = pm.variables.replaceIn(item.value); }); //log_info(pm.request.url.query.toString(), "query parmas"); //password参数替换为mad5加密后 if(pm.request.url.path.includes("login")){ params = pm.request.url.query; if(params.has("password")){ var password = params.get('password'); //password = pm.variables.replaceIn(password); /* var rlt = /^\{\{(\w+)\}\}$/.exec(password); if(rlt){ password = pm.variables.get(rlt[1]); } */ password_hash = CryptoJS.MD5(password).toString(); pm.request.url.query.upsert({key: "password", value: password_hash}); } } //添加请求默认参数 if(pm.request.method == "GET"){ pm.request.addQueryParams("app_key=" + app_key); pm.request.addQueryParams("company_id=" + commpany_id); pm.request.addQueryParams("imei=" + imei); pm.request.addQueryParams("timestamp=" + timestamp); pm.request.addQueryParams("language=" + language); if(pm.collectionVariables.has("access_token") && !pm.request.url.path.includes("login")){ pm.request.addQueryParams("token=" + pm.collectionVariables.get("access_token")); } } if(pm.request.method == "POST"){ b = pm.request.body; //console.log(b); if(b != undefined && b.mode == "urlencoded"){ //body.urlencoded.add({key: "app_key", value: app_key}); //body.urlencoded.add({key: "commpany_id", value: commpany_id}); //body.urlencoded.add({key: "imei", value: imei}); //body.urlencoded.add({key: "timestamp", value: timestamp}); //body.urlencoded.add({key: "language", value: language}); //console.log(b.urlencoded); } } //获取query params和body form数据,进行sign签名计算 data = pm.request.url.query.toObject(); //log_info(data, "query param data"); if(pm.request.body){ body_data = pm.request.body[pm.request.body.mode].toObject(); log_info(body_data, "request body data"); Object.assign(data, body_data); } //计算sign签名,添加sign参数到请求中 var sign = sn_sign(data, app_secret); //log_info(sign, "sn sign"); pm.request.addQueryParams("sign=" + sign); function sn_sign(data, secret){ //log_info(Object.prototype.toString.call(data), "object type"); if (Object.prototype.toString.call(data) === '[object Object]'){ var str = “”; //var reg = /a/; //reg = reg.compile(/^\{\{(\w+)\}\}$/); Object.keys(data).sort().map((key)=>{ var val = data[key]; str += key + val; }); str = str; //log_info(str, "origin string"); return CryptoJS.MD5(str).toString().toUpperCase(); } return ""; } function log_info(any, tag){ if(tag == undefined){ tag = any.toString(); } console.log("=====" + tag + "======"); console.log(any); console.log("===================="); }
最新回复(0)