Postman动态设置cookie计算sign等

mac2024-03-31  38

背景描述:

   接口测试阶段,需要通过登录接口抓包,获取token后填入;每次测PC接口还要重新设置Cookie;测试APP接口,改变参数还要去百度MD5一下获取sign;觉得好麻烦,有啥方法可以解决吗?看完教程,可以体验一下,是否方便了很多。前三点属于使用到的基础知识,后3点是实用的点

内容如下:

全局变量、环境变量Collections接口管理控制台日志查看Cookie、token动态设置Sign值自动计算统一设置cookie、token,统一计算sign

 

 

全局变量、环境变量

全局变量:任何环境可用;环境变量:当前环境可用;设置使用环境后,同一变量既存在全局中,又存在环境变量中,去环境变量的值。

那么问题来了,哪里设置变量,哪里选择环境呢?

变量可不在框中预先定义,在代码中设置后,会自动添加或更新到全局 or 对应环境中

设置全局变量代码:pm.globals.set("variable_key", "variable_value");

设置环境变量代码:pm.environment.set("variable_key", "variable_value");

可以点击test区域右侧的快捷方式添加(如下图):

参数引用

 

Collections接口管理

   在Postman中,Collection类似文件夹,可以把同一个项目的请求放在一个Collection里方便管理和分享,Collection里面也可以再建文件夹。可以在文件夹中添加同一的Pre-request Scripts 、 test 等

 

控制台日志查看

最开始通过获取login接口的token以及info信息自己拼接cookie值的时候,一运行,就报错,报的错毫无指导性,而且请求页未发送。通过开启Console的log,才知道原来直接读取的info信息有空格导致。

点击左下角第三个图标开启日志打印脚本: console.log(user);

 

Cookie、token动态设置

1.登录接口请求参数设置(密码是1123434的加密值)

2.获取token、cookie中的user值

代码:

pm.test("Status code is 200", function () {

    pm.response.to.have.status(200);

});  //验证200

//-----------------------test验证,可删除------------------

 

var jsonData = pm.response.json();

pm.globals.set("token", jsonData.data.token);  //token存入全局变量,待用

 

var user ="user=tk="+jsonData.data.token+"&"+"info="+jsonData.data.info; //组装成cookie

user = user.replace(/\s*/g,"");//去空格

pm.globals.set("user", user);

 

PC单个接口设置cookie

 

 

 

Sign值自动计算

   在Pre-request Scripts中编写脚本,会在请求接口之前执行。添加在每个接口中,只对当前接口有效。添加在Collections的文件夹中,对该文件夹下的所有接口有效。(文中代码只只支持按参数按首字母排序加密)

设置md5加密的key值

 

2.单个接口添加

 

计算sign代码:

var paramStr = (request.url.split("?"))[1].split("&"); //获取url中的参数值  如 weici=100

var params = {};

for (var i = 0; i < paramStr.length; i++) {

    params[paramStr[i].split("=")[0]] = paramStr[i].split("=")[1];    //参数生成键值对,用于排序

}

 

keys = Object.keys(params).sort() //请求参数名按照ASCII码升序排序

//拼接待签名字符串

var str = []

str.push(pm.globals.get("key"))

for (var p = 0; p < keys.length; p++) {

    if(keys[p] == "token" || request.data[keys[p]] === "" || keys[p] == "sign"){ // "==" ==宽松相等,隐性类型转换,值相等,返回true; "===" 严格相等,值和类型都相等,返回true

        continue;

    }

    str.push(params[keys[p]]);

}//只保留需要参与加密的参数

 

str.push( pm.globals.get("key"));  //key是设置的全局参数

var sign = str.join(""); //去空格

//生成加密原始字符串

//console.log(sign);

 

//MD5加密签名规格,并赋值给环境变量`sign`

pm.globals.unset("sign");

pm.globals.set("sign", CryptoJS.MD5(sign).toString());

 

统一设置cookie、token,统一计算sign

 

是否需要sign、or  cookie等可以同个创建不同的文件夹,设置不同配置,进行管理区分

6.1点击文件夹右侧... ,然后点击编辑,弹出如下图框,切换到对应tab

 

6.2设置文件夹下所有接口的cookie(单个接口中无需再次设置)

 

6.3设置文件夹下所有接口的token

 

使用步骤

  先运行login接口后,即可运行其它单个个接口

最新回复(0)