背景描述:
接口测试阶段,需要通过登录接口抓包,获取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接口后,即可运行其它单个个接口