postman这个神器相信大家都用过,程序员作为非专业的测试人员,非常需要这么一款简单轻量级的restful测试工具,但是不知道你是否知道,postman的强大之处不只是测试一下接口,还有其他非常赞的使用方式。

批量执行接口

入门级功能,但是被很多人忽略。postman左侧有个collections的tab,可以将接口进行分组,而且可以将分组以后的接口进行批量的执行,是一个非常赞的功能。当然,点击Runner也是可以的。

  • 批量执行入口

  • 批量执行界面

可以设置环境重复次数、每个接口延迟等,并且会显示批量执行的结果。

这个是非常基础的功能,有了这个基础以后,批量的测试以及自动化的测试都可以实现。

认证authorization

接口认证是所有接口必须做的事情,postman已经帮我们帮一些常用的接口认证机制可视化了,使用起来非常简单。

加入需要用的基础的auth认证,不管是auth1.0,还是auth2.0都能很好的支持。

当然,有的时候认证方式完全是自定义的,在authorization功能找不到认证的方式,例如很多的身份认证是需要通过时间戳、密码或者其他参数根据一定的算法规则,算出一个结果,那么是不是我们就没有办法使用了?当然不是,那就需要重点介绍的功能——postman脚本,但这之前,我们先介绍一下还有一个非常重要的概念:环境变量

环境变量

对于一个程序员来说,环境变量这个概念还是很好理解,这里的环境变量就是大家理解的那样了,设置了环境变量以后,所有的接口都可以使用这个变量,而且这个变量是可以通过代码进行修改的。

设置环境变量:

postman.setEnvironmentVariable("sign", mdmauth.toString());

使用如上环境变量,只要在参数中用{{sign}},如图:

执行前脚本

postman界面有个名叫pre-request script 的tab,从这里开始就介绍一下postman最重要的功能之一,脚本功能。pre-request script就是在请求之前执行的脚本。



执行前脚本我一般的用法就是用来修改环境变量,因为执行前做的事情,主要就是对请求的参数做一些处理。这里举个简单的例子:

某接口的接口认证规则,主要是通过header中的authentication来进行身份的认证,authentication的值是根据秘钥(key),时间戳(timeStamp),传入的参数(param),以及key、timeStamp和param组成生成字符串md5以后生成的sign,最终的结果类似于:

{"timeStamp": "2017-11-13 10:06:08",sign": "99f8d869d6a105afddd9d152c5894418"}

其实这是一个很常用场景,很多接口都是当前的参数和时间戳联合进行处理,来确保接口参数时效性,这样的场景直接通过参数或者环境变量肯定是有问题的,因为时间是动态的,只能动过程序来处理。我来处理方式大概就是:

  • 脚本计算出需要的值,将值设为环境变量
  • 参数设置的value为当前的环境变量
  • 执行测试

脚本如下:

  var date=new Date();
var y = date.getFullYear();
var m = date.getMonth() + 1;
m = m < 10 ? ('0' + m) : m;
var d = date.getDate();
d = d < 10 ? ('0' + d) : d;
var h = date.getHours();
h=h < 10 ? ('0' + h) : h;
var minute = date.getMinutes();
minute = minute < 10 ? ('0' + minute) : minute;
var second=date.getSeconds();
second=second < 10 ? ('0' + second) : second; //获取时间,格式为yyyy-mm-dd HH:mm:ss
var timespan=y + '-' + m + '-' + d+' '+h+':'+minute+':'+second;
var key='dfc96ds8-e5a0-45aa-a2ec-2611cds71d4e';
//通过request.data获取body的内容,这个是postman内置变量
var param=request.data;
console.log(key);
console.log(timespan);
console.log(param);
//CryptoJS,postman的内置js库
var sign=CryptoJS.MD5(key+timespan+param).toString(); console.log(sign);
var mdmauth="{\"timeStamp\": \""+timespan+"\",\"sysCode\": \"EUH\",\"sign\": \""+sign+"\"}";
console.log(mdmauth);
//设置环境变量
postman.setEnvironmentVariable("mdmauth", mdmauth.toString());

postman的脚本是大家非常熟悉的javascript脚本,而且postman还内置了一些重用的js库,基本能满足所有的使用场景,我们常用内置的函数包括:

  • Lodash,一个基础的函数库,大家应该都用过
  • cheerio,可以理解为另一个jquery
  • BackboneJS,js的mvc框架
  • CryptoJS,js加密库,支持几乎所有的常用加密方式

使用过程中我们也需要获取请求的值,或者请求的结果,post有几个内置的变量可以直接获取:

  • request 获取请求的参数,包括头和请求体
  • responseHeaders 返回值的header
  • responseBody 返回值的body
  • responseCode 返回值的http code

除此之外,还有几个内置的全局动态环境变量:

  • {{$guid}}: 生成一个guid
  • {{$timestamp}}: 获取当前时间戳
  • {{$randomInt}}: 获取一个动态整数

说真的,postman考虑的是在是太周到了,有了以上的神器,不只是可以自动化的编写脚本,而且还能非常方便的编写脚本,测试任何类型的接口。

具体内容,建议详细阅读:https://www.getpostman.com/docs/postman/scripts/postman_sandbox ,这个页面的内容非常重要。

测试脚本

前文介绍了批量执行接口,执行前脚本能相关内容,只要能支持编程,接口的测试就变得很灵活,容易定制。其实,正常的测试还有一个场景,接口的测试都是有依赖的,如接口的测试都依赖于token接口来获取脚本,或者批量测试的时候,后面的接口需要前面接口的返回值等,postman肯定也是支持的,批量执行接口结合测试脚本,使用就非常简单了。

测试的代码在Test这个tab中,这里的结果是测试完成后执行的内容。pre-request script是执行前,test是执行后,这样就能构成一个闭环了。(完美!!!)



示例代码:

var jsonData = JSON.parse(responseBody);

//tests的内容会在测试的时候展示
tests["http code"] = responseCode.code === 200;
tests["返回值正常"] = jsonData.Result===true; postman.setEnvironmentVariable("authtoken",CryptoJS.MD5(request.headers["UserName"]+jsonData.Data.FranchiseeCode)); //执行成功后调用下一个接口
postman.setNextRequest("获取待处理");

其中,有个函数postman.setNextRequest 会调用下一个接口,这两就可以让接口执行的有顺序,这就是我们需要的流程测试。

调试

既然涉及到编程,那么肯定也会涉及到调试,postman对调试的支持也是非常好的,只需要简单的设置,结合chrome就能进行调试。

首先,开启下chrome的调试。在chrome地址栏中输入:chrome://flags/#debug-packed-apps ,开启Debugging for packed app。(设置栏目较多,建议搜索找到)

接着,输入chrome://inspect/#apps,选择postman的inspect,就弹出我们熟悉的postman的调试框

我们在postman中的console.log或者断点都是可以进行调试的,和chrome调试web一样的。

总结

以上只是介绍了部分关于postman使用中,稍微高级一点的功能,其实postman还有很多好的功能,如文档导出、纯脚本测试,这些功能如果大家有用到,建议仔细阅读官网的doc,postman绝对不是简单的一个测试接口的工具,是一个完全覆盖开发人员测试场景的接口调试工具。

(完)


欢迎大家关注我的公众号交流、学习、第一时间获取最新的文章。

微信号:itmifen

你应该学会的Postman用法的更多相关文章

  1. 5分钟入门自动化测试——你应该学会的Postman用法(2)

    前言 之前的一篇文章<你应该学会的Postman用法>,主要介绍了postman的一些高级的用法,便于日常开发和调试使用,本文的基础是对postman的基本使用以及一些高级用法有一定的了解 ...

  2. Postman用法简介

    转自:http://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介 转载 2016年10月10日 09:04:10 10 ...

  3. Postman用法简介----https://blog.csdn.net/flowerspring/article/details/52774399

    https://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介

  4. Postman用法简介-Http请求模拟工具

    在我们平时开发中,特别是需要与接口打交道时,无论是写接口还是用接口,拿到接口后肯定都得提前测试一下,这样的话就非常需要有一个比较给力的Http请求模拟工具,现在流行的这种工具也挺多的,像火狐浏览器插件 ...

  5. [转] 学会fetch的用法

    fetch是web提供的一个可以获取异步资源的api,目前还没有被所有浏览器支持,它提供的api返回的是Promise对象,所以你在了解这个api前首先得了解Promise的用法.参考阮老师的文章 那 ...

  6. Postman用法,了解一下

    一.Postman的基础功能 二.接口请求流程 1. GET 请求 GET请求:点击Params,输入参数及value,可输入多个,即时显示在URL链接上, 所以,GET请求的请求头与请求参数如在接口 ...

  7. 学会使用postman模拟http请求(转)

    原文链接:http://www.cnblogs.com/mafly/p/postman.html 这个东西关键时刻还是有点用的.因为有些时候你和前端工作不协调的话,自己动手,丰衣足食.确定自己没问题是 ...

  8. postman用法总结+newman持续集成

    一.postman 1.GET 请求:点击Params,输入参数及value,可输入多个显示在URL链接上(GET请求的请求头与请求参数如在接口文档中无特别声明时可以不填) 2.POST请求:在bod ...

  9. Android 结合实例学会AsyncTask的用法

    AsyncTask执行时经过四个步骤,执行四个方法: 1.onPreExecute(),运行在UI线程,可以设置或修改UI控件,如显示一个进度条 2.doInBackground,运行在后台线程,不可 ...

随机推荐

  1. MVVM -- CallMethodAction 和 InvokeCommandAction

    MVVM实践教程   算算,从事Silverlight和WPF的开发也有1年多的时间了,虽然时间不算长,虽然还没有突出的成就,但是感觉也还算一般. 但是,从头至今都没有去认真研究和使用过MVVM,虽然 ...

  2. Linux Redis集群搭建与集群客户端实现(Python)

    硬件环境 本文适用的硬件环境如下 Linux版本:CentOS release 6.7 (Final) Redis版本: Redis已经成功安装,安装路径为/home/idata/yangfan/lo ...

  3. 作为前端Web开发者,这12个终端命令不可不会

    对于开发人员来说,终端是最重要的工具之一.掌握终端,能够有效的提升开发人员的工作流程.使用终端,许多日常任务都被简化为了编写简单的命令并按下 Enter 按钮. 本文列举了一系列 Linux 命令,旨 ...

  4. ubuntu下MySQL修改root密码的多种方法,phpmyadmin空密码无法登陆的解决方法

    phpmyadmin是默认不允许使用空密码的,所以若是在安装时没有设置密码,在登陆phpmyadmin时是个很头疼的问题 方法1是修改phpmyadmin的配置文件,这里不做推荐.. 方法2: php ...

  5. Noip2016愤怒的小鸟(状压DP)

    题目描述 题意大概就是坐标系上第一象限上有N只猪,每次可以构造一条经过原点且开口向下的抛物线,抛物线可能会经过某一或某些猪,求使所有猪被至少经过一次的抛物线最少数量. 原题中还有一个特殊指令M,对于正 ...

  6. 树莓派.使用Node.js来制作一个作业检查仪

    先上图 前段时间, 花了点时间给女儿做了个数学习题的小程序 首页 做题界面(题目每次都随机生成, 加减乘除都有) 做题记录 现在问题来了, 怎么才能随时知道作业有没有完成呢? 每次打开做题记录页面刷新 ...

  7. jQuery图片轮播(一)轮播实现并封装

      利用面向对象自己动手写了一个封装好的jquery轮播对象,可满足一般需求,需要使用时只需调用此对象的轮播方法即可. demo:https://github.com/zsqosos/shopweb ...

  8. 最详细的浏览器css hack

    注意点: 网上很多资料中常常把!important也作为一个hack手段,其实这是一个误区.!important常常被我们用来更改样式,而不是兼容hack.造成这个误区的原因是IE6在某些情况下不主动 ...

  9. mybatis 参数为list时,校验list是否为空

    校验objStatusList 是否为空 <if test="objStatusList != null and objStatusList.size() > 0 "& ...

  10. swift 之 namespace

    场景:  项目中类名过长,造成不能根据文件名区分出来,并且如果一个模块的类较多时,很难取一个比较优雅的名字.为了使模块名可读, 我们一般的做法就是添加模块前缀.但是如果模块中还有个子模块,如果还继续按 ...