postman是一款简单而又强大的网页调试和发送网页http请求的工具
官方指导文档:https://learning.postman.com/docs/getting-started/introduction/
1. 下载安装
https://www.getpostman.com/downloads/
支持mac、windows、linux,下载对应的版本
下载后得到一个zip包,Postman-osx-7.27.1.zip,解压安装即可
2. request四要素
- 请求方法 (GET、POST、PUT、DELETE等)
- 请求URL(如果是get请求,参数会自动解析在params中,也可以在params中编辑参数)
- 请求头
- 请求体(如果是post请求,请求体如果是json格式,选择raw,在最后面的下拉菜单中选择json)
3. 变量
postman中有四种变量:
- 环境变量:例如,请求url中的ip地址或域名,让测试用例既可以在测试环境运行,也可以在预发环境运行
- 全局变量:作用域是全局,可以在不同接口间传递参数,例如,token,将登陆返回的token做为全局变量供其他接口调用
- 局部变量
- 外部文件:例如,在run collections时,指定外部数据文件(csv或json格式),如批量登陆等
优先级:外部文件 > 环境变量 > 全局变量 > 局部变量。也就是说,变量名相同的情况下,外部文件的变量的优先级最高,环境变量覆盖全局变量
a)环境变量
场景:当同一个请求需要在不同环境下(如:test、pre、prod)运行时,可以设置环境变量;使用时,只需切换环境即可,不需要重复构造请求
在不同的环境,设置相同的变量名,变量值不同
环境变量的值,随环境的切换而变化
方法:可以先设置一个环境,然后在这个环境下设置一系列变量
应用:使用该环境变量时,格式{{domain_name}}
环境变量和全局变量,可以在请求的任何地方使用,却不能在pre-request和tests中使用,若要用,可以通过aaa = pm.globals.get("global_token")获取变量来使用
b)全局变量
场景:上个接口的出参,做为下个接口的入参
全局变量不受环境切换影响,始终存在
方法:在Tests中使用javaScript脚本设置(postman内置了node.js的运行时环境,可以执行js脚本)
当发送请求时,脚本将被解析执行
例如,获取响应体中的token,赋值给全局变量global_token
//获取body中返回的所有参数 var JsonData =JSON.parse(responseBody); //获取返回的auth_token值 var global_token = JsonData.result.token; //将authorization的值设置为全局变量 pm.globals.set("global_token", global_token);
应用:使用该全局变量时,格式{{global_token}}
c)局部变量
场景:局部变量只针对单个URL请求设置的变量,作用域只局限在请求范围内
方法:在Pre-request Script中设置,在请求执行前执行
例如:设置用户名和密码,如下:
应用:使用该局部变量时,格式{{username}}
若该变量应用在请求体中,原有的引号不能丢
d)外部文件
场景:多账号登陆时(类似Jmeter中的参数化)
方法:通过导入外部数据文件(json或csv),来获取变量的数据
json格式如下(loginAccount_json.json):
csv格式如下(loginAccount.csv):
txt格式如下(loginAccount.txt):
应用:在run->collection中设置
4. 构造请求
当请求内容为file文件类型时(例如上传文件等),在headers中设置content-type为multipart/form-data
在body中选择form-data,鼠标在key中悬浮,下拉框选择file类型,右侧等value会出现select files按钮,点击选择需要的文件即可
5. 断言
加上断言后,postman即可自动判断测试用例是否执行通过
如下,是一些常用的断言方法:
///////////////////////////////// 断言 //////////////////////////////////////// // 请求状态码,是否为200 pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); // 请求状态码,是否为200、202中的一个 pm.test("Successful POST request", function () { pm.expect(pm.response.code).to.be.oneOf([200,202]); }); // 响应json值检查,loginId字段是否为zhangyang pm.test("检查loginId字段是否为zhangyang", function () { var jsonData = pm.response.json(); pm.expect(jsonData.result.loginId).to.eql('zhangyang'); }); // 响应体中是否包含指定字符串 pm.test("检查响应体中是否包含ABC", function () { pm.expect(pm.response.text()).to.include("ABC"); }); // 响应头中是否包含指定字段 pm.test("检查响应头中是否包含Content-Type字段", function () { pm.response.to.have.header("Content-Type"); }); // 响应时间是否在200ms以内 pm.test("Response time is less than 200ms", function () { pm.expect(pm.response.responseTime).to.be.below(200); });
// 断言:检查status是否为200 pm.test("检查status是否为200", function () { var jsonData = pm.response.json(); pm.expect(jsonData.status).to.eql(200); }); // 断言:检查第一个药品名称是否为阿莫西林 pm.test("检查第一个药品名称是否为阿莫西林", function () { var jsonData = pm.response.json(); pm.expect(jsonData.result.list[0].name).to.eql("阿莫西林"); //列表值用下标[n]取 console.log("第一个药品的名称是:"+jsonData.result.list[0].name); //打印信息到控制台 });
6. 控制台
进入方式:
a)菜单 -> view -> show postman console
b)主界面左下角的控制台按钮
应用:
打开console,可以看到刚才的打印:
7. 导入导出
8. 更改执行顺序
默认按照Collections中的顺序执行,若想修改执行顺序,可以按照如下三种方法来:
1. 直接在collections中拖动请求,改变顺序
2. 在runner中,请求左侧的位置,可以拖动改变执行顺序(不会改变collections中的顺序)
3. 在请求的Tests中设置setNextRequest()来更改请求的执行顺序
例如:collections中是顺序是A-B-C,在A中设置下一个请求是C
执行结果:A-C