简介
postman是一个接口测试工具,常见的GET请求可以通过浏览器直接访问。但是涉及到POST请求、需要带cookie/权限相关的访问无法实行浏览器访问的时候。Postman最基本的功能就派上用场了。当然它还可以支持一些进阶的功能,比如接口自动化测试。下面就来具体讲一下。
优点
- 支持多种请求类型:GET/POST/PUT/DELETE/HEAD 等
- 支持多种认证机制:Basic Auth / OAuth 1.0 / OAuth 2.0 等
- 支持Header配置,发送不同请求
- 支持在线存储数据。随时迁移数据
- 支持导出,可以随时分享给其他人请求参数
-
下载/安装
Postman有Windows,Mac,Liunx以及Chrome插件版本。Chrome插件得翻墙,大多数人可以下载一个应用去使用
- 下载地址:https://www.postman.com/downloads/
- 官方文档:https://learning.postman.com/docs/getting-started/introduction/
- postman Api 文档:https://docs.postman-echo.com
基本操作
发送一个GET请求
1、启动软件后在引导界面点击Request,给Request命名,然后创建文件夹并把该Request归属到该文件夹。
2、在地址栏输入postman-echo.com/get然后添加参数后点击send按钮,可以看到返回值。
请求说明:
- Params下的Query Params是以键值对方式发送参数,
- 在URL后面加 ?可以添加发送参数,& 可以拼接多个参数
- 例如:https://postman-echo.com/get?foo1=bar1&foo2=bar2
参数编辑:
- 点击params按钮,postman可以自动办公们解析出对应的参数
- 如果暂时不传参数,可以方便的通过不勾选方式去实现
- 如果想要批量编辑参数,可以点击右上角的Bulk Edit,实现批量编辑
响应数据:
- 在主页下方一栏菜单为响应菜单栏,可以查看响应内容,Cookie、Headers、响应状态码等信息
发送一个POST请求
对一个POST接口发送GET请求。会报404
HTTP POST请求是将数据传输到服务器,返回 的数据取决于服务器的实现。
POST请求可以使用query String Parameters以及body将参数传递给服务器。
正确操作如下:
1、Query String Parameters传递参数
2、body传递参数
Postmam Body 数据类型数码:
- form-data multipart/form-data是Web表单用于出书数据的默认编码。这模拟了在网站上填写表单并提交它,表单数据编辑器允许我们为数据设置键-值对。我们也可以为文件设置一个键,文件本身作为值进行设置。
- x-www-form-urlencoded该编码与URL参数中使用的编码相同。我们只需输入键-值对,postman会正确编码键和值,请注意,我们无法通过次编码模式上传文件。表单数据和urlencoded之间可能存在一些差异,因此请务必检查Api的编码实现,确认是否可以使用这种方式发送请求。
- raw请求可以包含任何内容,除了替换环境变量之外,Postman不触碰在编辑器中输入的字符串。无论你在编辑区输入什么内容,都会随请求一起发送到服务器。编辑器允许我们设置格式类型,以及使用原始主体发送的正确请求头。我们也可以手动设置Content-Type标题,这将覆盖Postman定义的设置
- binary二进制数据可以让我们发送Postman我i发输入的内容,例如图像,音频或视频文件
进阶操作
header
请求头-用来说明服务器要使用的附加信息,比较重要的信息由Cookie、Content-Type、User-Agent等,在postman中可以在请求下方的Heafers栏目中设置,如下图所示
响应头:打开控制台可以查看response的header
Cookies
Cookie是存储在浏览器中的小片段信息,没次请求后都将其发送会服务器,以便在请求之间存储有用的信息。比如很多网站登录界面都有保留账号密码,以便下次登录。
由于HTTP是一种无状态的协议,服务器从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证,没人一个,无论谁访问都必须携带自己通信证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
Cookie是有服务端生成,储存在响应头中,返回客户端,客户端会将cookie存储下来,在客户端发送请求时,user-agent会自动获取本地存储的cookie,将cookie信息存储在请求头重,并发送给客户端。postman也可以设置、获取、删除cookie。
DEMO:
发送请求后,请求的request里面就带上了这个Cookie
想不带Cookie,X掉就行了
当响应返回里面有Set-Cookie的时候。你下次请求的时候就会自带刚设置的Cookie
刚请求完成后,我们的Cookies里面就有了这个Cookie
授权
Basic Auth Demo
Basic Auth 是一种比较简单的授权类型,需要经过验证的用户名和密码才能访问数据资源。这就需要我们输入用户名和应对的密码。
当不输入任何授权信息的时候访问:
输入用户名密码后访问:
还有其他类型的鉴权方式不一一列举了。可以自己测试下变量
变量根据应用范围区分为
本地变量(本次请求、本URL有效)
环境变量(某个环境可以使用的变量)
全局变量(全局生效。都可以引用)
覆盖关系为 本地>环境>全局
还有一种【数据变量】稍后再讲解,是通过CSV/JSON文件导入使用的
本地变量Demo:
环境变量Demo
再添加一个prod
发送请求的时候选择环境
beta
prod
如果这个时候还有【本地变量】,【环境变量】会被覆盖。
Global变量 Demo:
实践:从响应中获取到数据,作为下次请求的request参数
脚本
控制台上输出userId
查看Global是否被设置上
GET请求使用这个【全局变量】
断言
一般来说执行完测试,我们需要对测试结果来进行校验,判断结果是否符合我们的预期,也就是断言。在街口测试中一般会根据响应状态码或者返回的数据来进行断言。
postman提供一个测试沙盒(postman sandbox)测试沙盒是一个JavaScript执行环境,可以通过JS脚本来编写pre-request Script 和 test Script。
- pre-request Script(预置脚本)可以用来修改一些默认参数,在请求发送之前执行
- test Script(测试脚本)当接收到响应之后,在执行测试脚本。
Demo**
设置变量
使用变量请求,查看返回
脚本编写
//校验返回值为200
pm.test("Status code = 200",function(){
pm.response.to.have.status(200);
});
//获取请求的参数值打印
username = pm.variables.get("user");
console.log(username)
//校验响应内容是否和请求一致
pm.test("Check username = request.username", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.form["user"]).to.eql(username);
console.log(jsonData);
});
//检测响应时间是否小于0.5s
pm.test("Response time is less than 1000ms", function () {
pm.expect(pm.response.responseTime).to.be.below(1000);
});
其中请求超过1s了。所以校验失败了
再请求一次成功1s内返回
其他API还有一堆堆。可以自行学习
https://learning.postman.com/docs/writing-scripts/test-scripts/
扩展&集成
本地批量运行
基于Collection
执行结果
执行 3次 + 每次请求间隔1s
数据驱动
有时候需要我们参数化我们的参数,批量运行不同的case
1、创建一个data.json文件
[{
"username":"Jack",
"password":"6666"
},{
"username":"Bob",
"password":"5555"
},{
"username":"Marry",
"password":"8888"
}]
2、修改我们的请求以及Assert结果
设置环境变量
调试接口
批量运行
出现了两次超时导致的失败,其他校验逻辑通过
不过发现一个问题。retry的时候不会带上参数化的参数
Postman + Newman 实现API运行
1、安装 newman **
需要本地有node、npm环境
sudo npm install -g newman
sudo npm install -g newman-reporter-html
这个包在官方源中下载特别慢。以至于无法安装。我设置了taobao源,就很快安装上了
npm config set registry http://registry.npm.taobao.org/
安装完成后,执行
newman -v
则安装成功。
2、将刚才的文件夹导出
在本地会产生一个json文件,内容大致如下
3、执行命令
newman run ./Desktop/demo.json -r html
会在当前路径下产生一个newman的文件夹
打开这个HTML
我们发现case运行失败了2个case。
原因在于环境变量并未打包在导出的文件中。需要数据驱动。所以我们执行
newman run ./Desktop/demo.json -r html -d ./Desktop/data.json
执行完成后再查看报告
执行了三次。只有一次失败是超时导致。
命令说明
- run 代表要执行的postman脚本,即为导出的集合。
- -d 表示要执行的数据,也就是执行 data.json 的数据
-r 生成测试报告类型,这里生成html格式报告
更多方法请输入newman -h 即可查看
报告查看
newman不仅支持生成html报告,还支持其他报告类型,我们刚刚就是采用的Html格式的报告:
- JSON reporter
- JUNT/XML repoter
- Client report
- Html report
集成Jenkins
这个就是和Jenkins结合一下。
Jenkins所在服务器安装node、npm、newman。
上传demo.json / data.json 到服务器上
构建一个自由风格的JOB,里面配置下shell命令(内容和本地一样)就可以了。在这里不做演示了
导出为其他语言的请求
postman发的请求,可以自由转换为其他语言的语法。方便和其他语言(java/python 比较常见)结合着一起搞自动化测试