可以用于Restful接口测试的测试工具非常多,常见的有soapUI、Jmeter、fiddler等都经常用来做接口测试。但是目前在接口测试人员中最流行,最常见还是本问向大家介绍的Postman。 本篇我们结合Github的API来向大家介绍Postman的基本用法
Postman最早的版本,以及很长一段时间都是以Chrome插件的形式存在的。以至很多人甚至认为postman就是google的官方工具插件,我们目前能看到的大量资料也都是基于chrome的插件形式来进行介绍的。
但是目前Postman其实已经推出了独立的本地App程序,并且官方已经宣布不再支持chrome的插件形式。虽然插件版本现在还能使用,可是毕竟相比Native版本,受限于chrome浏览器的功能,很多功能在插件版本中是欠缺的,比如cookie的内建支持,代理功能,控制台功能等等。所以此处就不再介绍插件版本的安装。
本地版本的安装,其实也非常简单。从官网根据自己操作系统的类型选择相应的版本下载即可。
这里还有一点要注意下,在postman的官网,我们最好注册一个账号,后续在使用postman的时候很多高级功能需要用这个账号登录后才可以使用。
安装完成,在桌面上出现Postman那个pose很帅的小人图标
,则安装完成。
打开Postman进入,首次会提示选择希望创建的任务类型。
这里有六种任务类型,我们再下面的实战中都会详细讲解,这里先简单说明一下:
Request 是Postman软件的基础和核心,也就是通过这个功能来创建request请求,完成接口测试的核心工作。
Collection 其实是个集合,我们可以认为是一批Request请求的集合,或者说测试集。它也是Postman一些进阶功能的基本单位
Environment,字面理解就是环境,其实可以认为是一些配置变量的集合,实际应用中可以起到通过不同配置区分不同测试环境的效果
后面这三个都是Postman的高级功能
API documention,是通过我们调试通过的request来自动生成接口文档,便于团队的共享和接口的交付。
Mock server
在我们进行接口测试或开发的时候,很多时候是需要模拟对端的接口服务器的,Mock server就起到的模拟服务器端的作用。
Monitor
这是个监控功能,通过monitor我可以监控我的接口是不是正常。说白了,这其实就是个定时的接口执行功能。
以上大致了解下几种不同的任务类型,我们先关掉这个界面,我们再来看看主界面的功能区间
Banner 区域
首先是上面的菜单栏,对应功能区的各项功能,在菜单栏上都能找到对应的菜单。然后是下面的banner区域。
从左到右依次介绍:
NEW 会打开启动时的创建窗口,用于创建六种类型的任务。
Import 可以用于导入外部文件,外部文件可以是postman的Collection格式文件,数据文件,以及其他的API定义文件
Runner 会启动Collection runner,它是一个运行器,用于运行已经建立的测试任务。我们后面会有详细介绍
添加按钮, 可以新建tab,或者多开一个postman程序,或者runer程序。
中间 My WorkSpace 是选择使用的workspace,但这个需要账号登录,会同步云端的workspace设置。每个账号会有一个默认的workspace,workspace它是一个工作空间,大家可以理解成类似项目或者工程。
banner条右侧还有几个按钮:
-第一个是同步,也是在有账号的情况下,可以在多个电脑间同步workspace内的相关接口测试设计。
-第二个proxy,则类似前面介绍过的fiddler,提供代理抓取API功能。当然这个功能postman不像Fiddler那样丰富
-第三个按钮包括setting以及文档指南。 setting里是软件的本地配置
-第四个按钮是消息通知,很好理解,会显示一些提醒信息
然后是postman的twitter,在墙后面就不要去看了
-最后是登录,可以用postman的账号的登录
Setting 设置
Postman 工具的使用属性和应用设置我们可以在Setting 中国进行设置。以下分别说明:
General
Themes
Shortcuts
工具快捷键
Data
工具数据导入导出
add-ons
Newman 插件下载方法
Sync
同步设置
certificates
本地证书设置
Proxy
本地网络代理设置
update
升级设置
about
工具"关于...“等版本信息
左侧边栏
- filter筛选栏,筛选显示不同的消息
- history是操作消息记录清单
- collection如前面介绍,显示请求集合
底边状态栏
- 最左面,显示和关闭左侧边栏
- 然后是搜索功能,这个容易理解
- 第三个是控制台,可以在这里看到消息相互的详细信息
- 用户指南
- 调整功能区显示样式
- 快捷键清单参考
- 帮助相关的连接
主功能区
主要包括上下两部分,上面是request区,下面是response区。也可以分成左右显示。
Request区域
request部分默认开启了一个选项卡,可以新开多个选项卡便于同时编辑。
默认使用的是GET方法,这也是使用最多的HTTP方法,下拉可以选择其他的方法,常用的还有哪些? POST、PUT、Delete等。
URL部分输入请求的地址。比如我们输入GithubAPI的根地址。
param是参数管理界面,在这里我们可以添加参数(有key-value,块编辑模式)。
Send发送请求,小箭头下send and download,会在发送以后把响应消息导出成json保存。旁边的save,保存功能,其实是把这个request作为一个case保存到collection里。
鉴权部分,虽然request编辑器已经足够强大可以处理鉴权消息,但是很多时候鉴权是个使用频率很高的功能,所以Postman单独把鉴权部分抽取出来,并且封装了目前的绝大部分鉴权方式
继承,默认鉴权方式
不鉴权
bearer token鉴权,一般也叫Json web token,其实就是发送一个json格式的token令牌,服务端会针对token进行解密验证
Basic Auth基础验证,提供用户名密码验证,postman 会自动生成authorization,常用鉴权方式
digest auth,摘要式认证
在基本身份认证上面扩展了安全性,服务器为每一个连接生成一个唯一的随机数,客户端用这个随机数对密码进行MD5加密,然后返回服务器,服务器也用这个随机数对密码进行加密,然后和客户端传送过来的加密数据进行比较,如果一致就返回结果。
它是一个二次验证的过程,会有两次认证交互消息
客户端请求资源->服务器返回认证标示->客户端发送认证信息->服务器查验认证
Oauth,一般用于第三方认证,有1,2两个版本,需要提供的信息不太一样。也是常用的鉴权方式
Hawk 认证,是另一种认证方案,采用的叫消息码认证算法,和Digest认证类似,它也是需要二次交互的
AWS签名认证,是针对亚马逊的AWS公有云用户签名的认证方式
NTLM 是微软的局域网管理认证协议
大家有个基本了解即可,一般比较常用的就是basic以及OAuth2了。
header就是消息头管理,可以定义头部信息。
Body,请求消息体。一般Post、put、patch等会更新内容的请求才会携带消息体,
旁边pre-script,是指在请求发送前,可以做一些预处理的工作,类似junit等单元测试框架中的setup方法,支持js脚本语法
Test则是在响应以后,对响应进行校验或其他处理的,类似junit框架中的teardown方法,同样支持js脚本语法
cookie管理postman本地cookie信息
code是一个方便程序员的功能,可以自动将接口请求转化成相关语言编码,可以看到支持的语言非常丰富,基本涵盖了各种主流编程语言。
Response区域
响应消息右上角是状态码,悬停可以看到详细解释。另外是响应时间(从发出请求到返回客户端接收的时间),以及消息大小(含消息头和消息体)。
响应body部分,即消息体。包括以下几个按钮
- pretty,可以根据表现类型进行格式化显示,默认json,如果是其他格式类型,可以选择对应形式进行格式化。
- Raw 则是未格式化的形式
- preview 则是预览,就是在浏览器里渲染后呈现的样子,比如返回的是html就很直观。
- 旁边是自动换行按钮。
右边是拷贝到剪切板和查询按钮(正则,大小写敏感、全词匹配)
其他的几个tab:
- cookie:响应消息的cookie信息
- header:响应消息的header头部信息
- Test Results:在请求中添加test Script后,这里会显示测试脚本的校验结果
从Github API文档中,我们可以看到Github API支持多种鉴权方式
Basic authentication
curl -u "username" https://api.github.com
这是基本鉴权方式
OAuth2 token (sent in a header)
curl -H "Authorization: token OAUTH-TOKEN" https://api.github.com
也支持通过在Header中携带Oauth2的token进行鉴权。在github用户设置中可以生成这个token。
个人设置 > Settings > Developer settings > Personal access tokens
生成后会获得一个token字串
OAuth2 token (sent as a parameter)
curl https://api.github.com/?access_token=OAUTH-TOKEN
或者通过在URL中携带token参数鉴权。
Postman中,可以在Collection中设置鉴权
在具体的请求消息中,可以选择Inherit auth from parent,即继承上一层的鉴权。发送请求后,可以看到已经在header中携带了鉴权的token信息
根据[Github API的定义](https://developer.github.com/v3/#rate-limiting),对于请求有访问限制,即未鉴权的请求限制访问为每分钟60次,对于已鉴权的请求访问每分钟5000次。
我们从响应消息的消息头中可以看到这个设置,如:
X-RateLimit-Limit →5000X-RateLimit-Remaining →4999X-RateLimit-Reset →1546528838
现在我们再来看如何在Postman中实现常用的HTTP方法。还是以GithubAPI为例:
GET方法 - 获取Repo信息
这里是获取Github上Repo信息的API,这里有两个路径参数,owner代表用户账号,repo指需要获取的repo信息。 如图是在postman中设置路径参数的方法。
POST方法 - 创建Repo
创建Repo的示例(https://developer.github.com/v3/repos/#create)
POST /user/repos
这里是一个创建hello world的Repo的请求消息体示例
{ "name": "Hello-World", "description": "This is your first repository", "homepage": "https://github.com", "private": false, "has_issues": true, "has_projects": true, "has_wiki": true}
这里name是必填字段,其他是repo的属性设置。 在Postman中如图在Postman中如图提交,返回状态码201 created,即可创建一个Hello world的Repo
在Github中,可以看到账号下新增了一个hello world的repo,并且包含有已设置的issue、projects、wiki这几个栏目
PATCH方法 - 修改Repo
GitHub可以通过PATCH方法来对Repo进行修改.PATCH方法和PUT方法都是update的修改方法,但PATCH方法更多用在部分修改的场景下,PUT方法则更多是整体替换。
PATCH /repos/:owner/:repo
比如上例中hello world这个repo修改Repo中的部分信息,可以去除projects和wiki这两个栏目 消息体:
{ "name": "Hello-World", "description": "This is your first repository", "homepage": "https://github.com", "has_projects": false, "has_wiki": false}
Postman中如图:
回到Github,可以看到Repo中对应的栏目已经不见了
PUT方法 - 设置或替换Topic
Topic是Github上Repo的搜索关键字,便于用户进行repo查询。
PUT /repos/:owner/:repo/topics
Github API设置topic的api是使用put方法提交一个topic数组,如
{ "names": [ "restapi", "atom", "chengxiaqiucao" ]}
这时在Postman中提交,会发现有如下报错:
这是因为Github API要求设置topic时,需要在header中设置accept字段,取值:
application/vnd.github.mercy-preview+json
正确设置后,则可以看到设置成功,返回200 OK
大家可能会发现一个小bug,当设置的topic存在大写字符时,会出现格式报错。比如大家参照官方示例设置"API"这样的topic,会发现设置不成功。大家可以尝试一下。
DELETE方法 - 删除Repo
Github API中,使用delete方法可以删除repo
DELETE /repos/:owner/:repo
删除成功后,返回204. 此时再查询账号,应该发现Hello-World这个repo已经被删除了
至此,我们通过Github API中几个实际的例子,学习了如何通过Postman来完成一些基本的HTTP方法的请求发送和响应查看,通过查看结果状态码或响应内容来判断结果正确性。
当然Postman的功能远不止于此,API接口测试中也还有很多复杂的场景需要特别处理。 欢迎大家继续关注本系列