背景描述

有一个项目要使用postman进行接口测试,接口所需参数有:

  • appid: 应用标识;
  • sign:请求签名,需要使用HMACSHA1加密算法计算,签名串是:{appid}${url}${stamp};
  • stamp:这个是时间戳;
  • option:业务参数;

问题是怎么在Postman发起请求时根据参数动态构建签名(sign)?

postman的脚本库中CryptoJS是支持各种算法的加密,包括HMACSHA1,签名算法有了。

难点是获取url中的path参数,当发起一个请求时开始可以固定一个path值的,自动化测试需要执行时获取path值,怎么获取呢?

创建一个GET请求

postman基础用法就不介绍了,先创建一个GET请求,URL中有配置各种动态参数

{{变量名}} :postman引用环境变量的语法;

{{$guid}}:postman预定义的环境变量用于获取一个GUID值;

在pre-request scripts构建签名

pre-request scripts 是个javascript执行环境,在请求发送之前执行;把他当做js用就行,不过有的js库是不支持的。

接下来就是动态获取签名了

1、appid环境变量中配置的固定值;

2、stamp时间戳获取:

//获取unix时间
getUnixTime:function(){
return Math.round(new Date().getTime()/1000);
}

3、url值可以通过request.url获取然后解析出其中的path:

//获取url的path部分
getUrlRelativePath:function(url){
var arrUrl = url.split("//");
    var start = arrUrl[1].indexOf("/");
    var end=arrUrl[1].indexOf("?");
    var relUrl = arrUrl[1].substring(start,end);//stop省略,截取从start开始到结尾的所有字符
    console.log(relUrl);
return relUrl;
}

4、构造签名串,使用秘钥加密即可。

postman提供的加密算法库并不一定所有都支持,有时候需要向后台去换取签名;

var host=pm.environment.get("host");
var text=encodeURIComponent(plain);
pm.sendRequest(host+"/FaceIn/ToHmacsha1?plain="+text+"&secret="+sercret, function (err, response) {
var json=response.json();
//签名含有+等特殊字符需要url编码
pm.environment.set("sign",encodeURIComponent(json.result));
});

签名串最好进行URL编码。

遗留问题:向后台换取签名的时候起初是返回字符串responsejson()解析不了的!

5、使用eval将定义的变量postmanUtil注入全局变量中然后调用

eval(environment.postmanUtil);
postmanUtil.setLsdzSign();

结果如图:

代码如下:

var postmanUtil={
//获取unix时间
getUnixTime:function(){
return Math.round(new Date().getTime()/1000);
},
//获取url的path部分
getUrlRelativePath:function(url){
var arrUrl = url.split("//");
    var start = arrUrl[1].indexOf("/");
    var end=arrUrl[1].indexOf("?");
    var relUrl = arrUrl[1].substring(start,end);//stop省略,截取从start开始到结尾的所有字符
    console.log(relUrl);
return relUrl;
},
//签名
setLsdzSign:function(){
var appid=pm.environment.get("appid");
var sercret=pm.environment.get("appsercret");
//时间戳
var time=postmanUtil.getUnixTime();
pm.environment.set("stamp", time);
//地址 获取当前地址的path部分
var path= postmanUtil.getUrlRelativePath(request.url);
console.log(path);
var url=path;
var plain=appid+"$"+url.toLowerCase()+"$"+time;
var hmac = CryptoJS.HmacSHA1(plain, sercret).toString(CryptoJS.enc.Base64);
//获取签名,CryptoJS.HmacSHA1 无法满足签名算法只能从后台
var host=pm.environment.get("host");
var text=encodeURIComponent(plain);
pm.sendRequest(host+"/FaceIn/ToHmacsha1?plain="+text+"&secret="+sercret, function (err, response) {
var json=response.json();
//签名含有+等特殊字符需要url编码
pm.environment.set("sign",encodeURIComponent(json.result));
});
}
}
eval(environment.postmanUtil);
postmanUtil.setLsdzSign();

脚本写在环境变量中

在Pre-request Script写上面代码,要是单个接口还是可以的,即使很多接口只要Copy一份即可。

万一脚本需要改麻烦就来了,你需要去每个请求的 Pre-request Script窗口改,怎么解决呢?

可以解决,将postmanUtil定在ENVIRONMENT中就可以了,做法如下:

其实就是将postmanUtil放入环境变量了,其它没有变,只要维护环境变量里的值就OK了,不用一个个去改。

再看pre-request script代码,这样就简单多了:

postman console的用法

不知道是否成功获取了环境变量,又或者想查看某个变量的值,postman也提供了很方便的控制台查看,菜单ViewShow Postman Console可以打开如下控制台:

图中是console.log(sercret)sendRequest()的结果

Collection Runner 自动化API测试

创建接口的测试用例

对于返回html的结果,只要测试body中包含某个值就算通过

对于返回Json结果,只要Code为0即为通过

窗口右侧有常用的脚本快捷操作,选中就可以生成,很方便

选择并运行自动化接口测试

点击主页左上角Runner进入,选择之前构建好的接口,并选择好环境,点击Run xxx 接口运行脚本测试

测试结果

可以看到结果2接口都成功返回预定的结果

参考

postman自动化接口测试的更多相关文章

  1. Python+reuqests自动化接口测试

    1.最近自己在摸索Python+reuqests自动化接口测试,要实现某个功能,首先自己得有清晰的逻辑思路!这样效率才会很快! 思路--1.通过python读取Excel中的接口用例,2.通过pyth ...

  2. 用postman做接口测试实例

    使用postman做接口测试,可以选择请求方式,可以直接输入参数和header,可以编写测试结果的代码,判断是否通过测试 下图为填写接口测试地址.填写接口的参数,点击send发送请求 其中,Param ...

  3. postman 做接口测试

    Postman 之前是作为Chrome 的一个插件,现在要下载应用才能使用. 以下是postman 的界面: 各个功能区的使用如下: 快捷区: 快捷区提供常用的操作入口,包括运行收藏夹的一组测试数据, ...

  4. 利用postman进行接口测试并发送带cookie请求的方法

    做web测试的基本上都用用到postman去做一些接口测试,比如测试接口的访问权限,对于某些接口用户A可以访问,用户B不能访问:比如有时需要读取文件的数据.在postman上要实现这样测试,我们就必要 ...

  5. Postman 关联接口测试(带有token鉴权)

    Postman 关联接口测试(带有token鉴权) 一.登陆接口 创建一个request请求 在Tests中添加JavaScript代码,用来获取鉴权 pm.test("V2", ...

  6. Jenkins之自动部署、代码安全扫描、自动化接口测试

    搭建Jenkins wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.reporpm --i ...

  7. postman做接口测试 application/x-www-form-urlencoded 格式与json格式互转

    背景:用postman做接口测试可以使用application/x-www-form-urlencoded请求,也可以使用json请求,接口文档如下: 请求参数 字段 类型 是否必填 注释 websi ...

  8. postman简单接口测试

    Postman简单接口测试 1. get请求: a. 选择get请求时,地址栏输入地址,如果需要添加参数,可以直接在地址栏加?后面写参数,也可以在点击params添加参数 b. 在headers中添加 ...

  9. python+requests+unittest执行自动化接口测试

    1.安装requests.xlrd.json.unittest库 <1>pip 命令安装: pip install requestspip install xlrdpip install ...

随机推荐

  1. Oracle中动态SQL详解(EXECUTE IMMEDIATE)

    Oracle中动态SQL详解(EXECUTE IMMEDIATE) 2017年05月02日 18:35:48 悠悠倾我心 阅读数:744 标签: oracle动态sqloracle 更多 个人分类:  ...

  2. 170820-关于JSP页面的知识点

    1.JSP [1] 简介 > HTML - HTML擅长显示一个静态的网页,但是不能调用Java程序. > Servlet - Servlet擅长调用Java程序和后台进行交互,但是它不擅 ...

  3. php.ini 配置项详解

    本文主要对php.ini文件进行详细的解释 engine = On ——> 在apache下启用php语言引擎 short_open_tag = Off ——> 是否开启段标签  若php ...

  4. yum安装Development Tools报错问题

    yum安装Development Tools报错问题 我们通过yum安装Development Tools开发组工具的时候,有时可能会遇到如下报错信息. [root@superdesktop ~]# ...

  5. OAuth 2.0 综述

    OAuth 2.0 rfc6749 规范 OAuth 2.0 rfc6749 规范-带目录,阅读 RFC 文档的 工具 OAuth 官网 OAuth2 核心 角色 Token 类型 access to ...

  6. Run Your Tensorflow Deep Learning Models on Google AI

    People commonly tend to put much effort on hyperparameter tuning and training while using Tensoflow& ...

  7. Vue CLI UI:Vue开发者必不可少的工具

    突然发现一个Vue cli 比较好用的工具,一个可视化图形界面方便你去创建.更新和管理Vue项目.这里分享2个作者写得比较好的文章 https://codeseeding.com/portal.php ...

  8. mysql: "Warning: Using a password on the command line interface can be insecure." 解决方法

    错误重现: 命令行或者shell脚本中执行以下命令,如果您当前服务器mysql版本是大于5.6的,则会出现警告:Warning: Using a password on the command lin ...

  9. webpack的code spliting与chunks

    webpack的code spliting与chunks :https://blog.csdn.net/liuqi332922337/article/details/53020992

  10. [BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 (Treap+单调队列)

    题面 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发现她们已经结成了几个"群".每只奶牛在吃草的时候有一个独一无二的位置坐标Xi,Yi( ...