Postman是一款支持http协议的接口调试与测试工具,功能强大,使用简单且易用性好 。无论是开发人员进行接口调试,还是测试人员做接口测试,postman都是我们的首选工具之一 。
为了让便于大家快速了解其常用功能,尤其是接口测试中经常使用到的部分,我将从以下几个维度来加以说明。它们分别是:
大部分接口都是JSON类型的接口请求,即请求头中Content-Type的类型为application/json。我们以登录接口为例演示如何使用Postman发送请求。
假设我们的登录请求接口信息如下:
Collection在Postman里的主要作用就是对接口测试用例进行集中批量管理,通过Collection,我们可以对用例进行分类管理和维护,同时可以对接口用例进行批量测试,方便进行回归测试。
点击Postman左上角新建或者在collection Tab菜单下点击"+"即可创建collection。
可以选择新建的collection,点击右下角的"…"按钮选择添加request,如下图所示:
也可编写好request后,选择保存request,然后在postman中弹出的对话框中选择保存到对应的collection中,如下图所示:
点击collection右侧的三角形按钮,点击"Run",Postman会弹出一个叫Collection Runner的界面,默认会把Collection中的所有用例选中,如下图所示
点击运行按钮,就会对Collection中选中的所有测试用例运行。
执行完成后,可以查看对应执行结果
断言主要是对request返回的数据进行相应的判断,从而方便我们进行自动化测试,postman提供的断言使用JS编写,在响应体数据返回后执行 。postman已经给我们内置了一些常用的断言 ,需要用的时候,只需从右侧点击其中一个断言,就会在文本框中自动生成对应断言代码块。
如上图所示,针对登陆这个接口,在Tests标签内对请求返回的数据使用了2个断言,第一个断言判断请求返回的状态码是否为200,第二个断言判断返回的token长度是否为32,这两个断言都通过测试的话基本可以认为这个接口测试是通过的。
Postman提供了的内置断言如果不满足需要的话,大家可以查阅官方文档里面提供的demo,链接如下:
Tests官方样例参考
在断言部分的介绍中,我们其实已经使用了Tests脚本,其实Postman 的 script 主要分成两类,一类是 Pre-Request Scripts,在发送请求之前执行,一类是 Tests,在接收到响应之后执行。
Collection/Folder/Request 层面都可以定义自己的 Pre-Request Scripts 和 Tests,执行顺序如下:
对于集合中的每个请求,脚本将始终根据以下层次结构运行:集合级脚本(如果有)、文件夹级脚本(如果有)、请求级脚本(如果有)。
单个请求的执行顺序如下:
变量使我们可以在请求或脚本中存储和重复使用其值,通过将值保存在变量中,可以在集合,环境或请求中引用。例如,我们的接口除了登录以外,所有接口都需要添加token信息,如果发送每个请求前都再执行一遍登录接口或者将请求token放到Pre-Request Scripts中未免显得有些繁琐,我们可以将登录接口返回的token存到变量中,后面接口发送请求时直接获取该变量值并填写到headers中即可。
在postman常用的三种变量分别是全局变量,环境变量,集合变量 。
变量的作用域采用"就近原则",如果在两个不同的作用域中声明了同名的变量,那么将使用作用域最小的变量中存储的值——例如有一个全局变量和一个局部变量都命名为username,则请求时将使用局部变量的值运行。
定义全局变量和环境变量,点击Postman右上角的小齿轮,弹出如下界面,就可以根据需求定义全局变量或者环境变量了。
集合变量可以点击集合右侧“…”按钮,选择“Edit”,选择变量选项卡添加或编辑变量
如果在请求参数中获取变量,无论是获取全局变量,还是环境变量,还是集合变量,获取的方式都是一样的编写规则:{{变量名}} 。
请求参数指的是:URL,Params , Authorization , Headers , Body
如果是在编写代码的位置(Tests,Pre-requests Script)获取变量,获取不同类型的变量,编写的代码都不相同,具体如下:
设置变量在Tests和Pre-requests Script中进行
// Variables
// 这个方法会从上面所有的变量来源寻找对应的变量,就近原则,优先从最靠近自己的地方找
var value = pm.variables.get("variable_key");
// Globals
// 设置一个全局变量
pm.globals.set("variable_key", "variable_value");
// 取消设置全局变量,移除变量
pm.globals.unset("variable_key");
// Environments
// 设置一个环境变量
pm.environment.set("variable_key", "variable_value");
// 从环境中移除某一个变量
pm.environment.unset("variable_key");
// Collection
// 设置一个 collection 变量
pm.collectionVariables.set("variable_key", "variableValue");
// 从 collection 中移除一个变量
pm.collectionVariables.unset("variable_key");
// local
pm.variables.set("variable_key", "variable_value");
pm.variables.unset("variable_key");
在接口测试中,我们经常遇到这种情形:上一个接口的返回数据是下一个接口的输入参数 ,那么这俩个接口就产生了关联。 这在做接口测试时非常常见,在postman中,实现这种关联关系的实现思路如下:
我们在变量部分举的登陆获取token的例子就是这种场景。