postman使用教程

 

      接口在联调阶段须要一些方便快捷的工具来检验咱们的接口开发效果,目前接口请求工具也是五花八门,有浏览器插件型的,如firefox上的poster插件,chrome上的postman插件,有工具界面型的,如jmeter等等。如何选择一款接口请求工具?其实选择工具就若是咱们出去吃饭同样,哪家人多去哪家,准差不离,因而postman就成为了摆在咱们面前的那道菜,我将为你们介绍如何去品尝这道菜。
 
接口请求流程
 

 

 
postman使用
 
从流程图中咱们能够看出,一个接口请求须要设置:请求URL,请求方法,请求头,请求参数。一样的,在postman中,咱们也只须要设置这四项便可完成一次请求。
 
GET请求示例
 

 

说明:GET请求的参数在URL连接上,因此,GET请求的请求头与请求参数如在接口文档中无特别声明时,能够不填。
 
GET响应示例
 

 

说明:特别标注出了响应HTTP状态码与响应正文,还有请求的耗时。需特别注意的是注意区别HTTP状态码与响应正文中的状态码,只有HTTP状态码是200时,才表明这个接口请求是正确的,这个是HTTP协议定义的,而响应正文的状态码,是程序员自已定义的,能够是200,也能够定义为其它值,是为了让接口使用者去区分正常数据与异常数据,好比:
 

 

 
POST请求示例一
 
POST表单提交,先看下图POST表单提交示例:
 
 

 

 

 

上图示例中设置了请求方法,请求URL,请求参数,但没有设置请求头。有一个要明确的点是,请求头中的Content-Type与请求参数的格式之间是有关联关系的:
 

 

当选择x-www-form-urlencoded的参数方式后,postman自动的帮咱们设置了Content-Type,因此不须要咱们人工干预,这就是使用一款流行工具的好处,把一些基础点都帮咱们处理了。 
 
POST请求示例二
 
JSON串提交,以下图示例:
 

 

 
上图中,当咱们选择了JSON(application/json)时,postman一样帮咱们自动设置了Content-Type,能够自行的去查看一个Headers.
 
POST请求示例三
 
HTTP的POST请求的参数,都是放在请求正文中的,只是根据Content-Type来判断请求正文的格式,那么咱们一样能够在表单提交时,选择raw,而后自行设置Content-Type为application/x-www-form-urlencoded。
 
 

 

postman断言
 
一个完整的接口测试,包括:请求->获取响应正文->断言,咱们已经知道了请求与获取响应正文,接下来将会告诉你们如何用postman进行断言。
 
 

 

这个”Tests”就是咱们须要处理断言的地方,postman很人性化的帮咱们把断言所用的函数全给准备好了:
 
 

 

 

虽然都是英文,但看懂应该并不懂。OK,英文看着烦,不想看,是吧,那好,咱们来设置一个断言场景,根据这个断言场景,来教你们如何来用postman的断言,场景以下:
 
1.  判断HTTP返回状态码为200
2.  判断响应正文中是否包含:"statusCode":200
3.  解析响应正文,并判断statusCode的值是200,message的值是”Success.”
 
在SNIPPETS中,往下拉,有一项”Status code:Code is 200”,这个就是为场景中的第一条准备的,就是判断HTTP返回状态码是否为200。点击这一项,能够看到在其左边出现了:
 

 

 
解释一下这句代码的意思:
tests["Status code is 200"]中的tests是一个内置对象,tests["Status code is 200"]是指为这个断言起个名称叫”Status code is 200”,这个名称能够自行修改。
 
responseCode.code === 200 中的responseCode是内置对象,responseCode对象中有个属性是code,是指HTTP状态码的code,判断code是否为200.
 
综合起来,这句代码的意思是:名称为”Status code is 200”的断言中,判断responseCode对象的code属性值是否为200。
 
一样在SNIPPETS中,找到一项”Response body:Contains string”,顾名思义,这条就是为场景中的第二条准备的,点击后,在其左边出现了:
 

 

咱们须要修改一下:
 

 

场景中的第三条,很显然,咱们须要解析JSON串了,因此,在SNIPPETS中找到”Response body:JSON value check”并点击,在其左边出现了:
 

 

 

 
咱们能够看出,这里面实际上是JS代码,jsonData变量实际上是解析完JSON后的对象,在JS中,一个JSON对象获取其属性的值,直接是用jsonData.value,因而,咱们把代码给修改一下:
 
 

 

 

这样一来,咱们能够看到一共有tests的断言4个,点击Send,发送请求,在响应区内能够看到以下图:
 

 


 

表示咱们的断言所有经过。
SNIPPETS中还有不少的函数提供给咱们了,你们能够自行去体验一番。师父领进门,修行靠我的!努力吧,测试君!
 
 
postman的基本使用,已经跟你们讲了,并收到了一些反馈,但愿能讲讲postman如何一次运行多个接口请求。歪果仁的技术思想不得不佩服,想用者之所想,把管理用例与运行用例集成在了一块儿。让咱们一块儿去歪果仁的技术思想中浪里个浪去吧!
 
管理用例---Collections
Collections,集合。也就是将多个接口请求能够放在一块儿,并管理起来。什么样的接口请求能够放在同一个collection里?在这里告诉你们能够这样:一个工程一个Collection,这样方便查找及统一处理数据。也能够这样理解:collection即工程。
 

 

第一步,建立一个Collections
点击上图中的带+号的图标
 

 

 
输入Name:”demo”,Description:”demo for baixiaosheng”,点击Create按钮即建立成功一个Collections.
 
 

 

 

第二步,往Collections里添加请求。
 

 

 
将准备好的接口请求点击如上按钮
 

 

 
 
按上图选择好Collection及填写好Request name后,点击右下角的Add to collection按钮,即将一个请求添加进了Collection。
 

 

 
Collection精细化---Folder
在前面讲到了collection即工程的概念,工程是能够管理,也是能够模块化的。随着放入Collection的请求愈来愈多,混乱就又出现了,在找一个请求时,要找半天,因而将collection中的请求分门类别就很重要了,歪果仁也想到了,因而,在collection中就能够添加Folder了,将相同场景的请求放入同一个Folder中,因而就实现了模块化的管理了。
 

 

 
 
点击上图中的Add Folder后
 
 

 

添加上Folder name,即模块名称后,点击Create,建立成功一个Folder。
 
接下来,只须要把相同场景的请求拖入相同的Folder便可,这样就实现了模块化的管理了。模块化之后的结构:

 

 
 
 
 
运行Collection
将工程模块化的用例管理起来后,借着这个管理起来的东风,也能够将工程模块化的用例执行起来,即一次执行一整个collection里的用例,或者执行一个collection里的某一个Folder里的用例。
 
 

 

点击Runner,
 

 

 
上图中的”Choose collection or folder”,若是选择demo,表示运行demo这一整个collection的用例,若是选择GET,即只运行demo下的GET模块下的用例。
 
Environment,即运行环境,是开发环境仍是测试环境,需事先配置,你们能够下去自已尝试一下。
 
Iterations,即重复运行次数。会将选择好的collection中folder重复运行。
 
Delay,间隔时间。用例与用例间的间隔时间。
 
Data,外部数据加载,即用例的参数化,能够与Iterations结合起来用,实现参数化,也就是数据驱动。
 
Start Test Run,点击运行,运行完成后,便可得出一个简易的聚合报告。
 
Collection运行参数化
 
在Iterations重复运行时,若是某个用例但愿每次运行时,使用不一样的数据,那么应该知足以下2个条件:
 
  1.  脚本中要用到数据的地方参数化,即用一个变量来代替,每次运行时,从新获取当前的运行数据。
  2. 须要有一个数据池,这个数据池里的数据条数,要与重复运行的次数相同。
 
Postman的runner给咱们提供了Iterations的输入项,也提供了Data的文件选择项,也就是意味着数据池是一个外部文件。若是Iterations里的值为2,那么,这个外部文件里也应该有两条数据,postman但愿咱们这个外部文件里的数据是一个json(固然也能够是其它的数据格式),那么,为了表示两条数据,这个json应该是一个list结构,同时,因为脚本要用到数据的地方须要参数化,须要变量,因此,每一条数据应该就是一个map,map的key对应脚本中的变量.
 

 

 
上图中表示提供了一个msg的变量,每次运行对应不一样的值,预示着在脚本中能够用到msg这个变量,那在脚本中如何用?
 

 

 
如上图断言中用data.msg,其中data是个内置对象,即表明每一次运行的那个map数据,因此,能够用data.msg来获取每次运行的对应的值,固然,因为是个map,也能够用data[‘msg’]来获取对应的值。
 
 
万万没想到,postman居然如此之强大!咱们还有什么理由去拒绝?介绍完以后,可能新的问题又来了,如何与jenkins结合实现持续集成?歪果仁的技术思想是很强大的,因此,产生了个newman,是个命令行运行postman请求的工具,建议你们自行去研究下,由于那确实就只是个命令行的工具而已!