postman工具安装
官网下载 直接下一步安装就行(傻瓜式操作)
postman基本使用
以我目前下载的最新版8.6.1版本为例
进入首页
创建一个新的请求
create new 之后的页面是下图,目前还是以新建请求为主
这是新建的请求,默认的请求方法是get,可以换成其他的
collections和history用的最多
collections是集合,方便管理接口,可以给接口进行分类管理
history是历史,可以方便的查询到之前测过的接口
加号是新建集合。
一个项目分为好几个模块,比如首页、分类、个人信息等,可以一个模块中的接口放到一个集合里边,或者按其他的分类方式都可以
postman使用方法
只有接口没有参数时,key和value都不填。key是参数名,value是参数值
在响应体中快速查找你想找的内容
需要填参数时,和上面没有填参数的大概一样,只是在key和value的位置填了参数名和参数值
如下图 共有两个参数分别是用户名和密码
用户名username = 王昭君,密码pwd = 1
传入不同的参数响应体对应的结果也不相同
如果查询成功在响应体的位置会有成功的提示,查询失败也有失败的提示
拿到接口文档后怎么用postman进行测试?
1.根据接口文档进行对比,接口文档上的响应体和我查到的响应体是否一致
2.显示的内容是否和数据库中查到的内容是一致的
postman之断言
为什么要做断言?
为了看我们的响应是否正确,预期结果和实际结果是否一致,断言里写的是预期结果,Test Results是实际结果
断言一般是接口还没有通的时候把预期结果写上,一般在括号内写预期结果,接口通了直接发送就行
断言参数,在Pre-request中进行操作
断言响应,在Tests中进行操作
下图:断言响应
pm:代表对象,可以理解为postman
pm.test :先做一个测试
‘状态码显示200’:这个测试的名字(可以自己随便起,这句代码实际意思是响应时间是200ms以内)
所有标点符号都要用英文标点
function是一个函数(要创建一个函数)
{}内的是创建的具体内容
expect是一个方法,这个方法是去看我现在的响应返回的状态码是否是我想要的
因为我们是想要响应的状态,所以是pm.response
responseTime是响应时间
to.be.below()是要和哪个内容做对比
因为我们想要的是200ms以内,所以()内就是200
每句代码结束后要加分号
断言的就是状态是成功还是失败
Test Results是代表断言结果,一共有一条结果,一条成功
如果不知道函数里边代码怎么写也没关系,一般常用的代码postman里都会有,找到自己想要操作的内容,直接点击使用就行
Response body:Contains string
看响应体里是否包含你想要找的内容,是否匹配此字符串
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("这里写你想要对比的内容");
});
Status code:Code is 200
看状态码是不是200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);这里的200可以改成其他的状态码
});
Response body:JSON value check
检查json格式的内容是否正确
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
//value是实际接口中的key,100是实际接口中的value,必须一致,一点也不能缺
});
postman之参数化
有两种方式
一种是文档参数化,另一种是变量参数化
变量参数化
指很多接口使用同样的一个内容
变量有两种方式,一种是环境变量,另一种是全局变量
环境变量是我选这个环境变量就使用这个环境变量,只要接口使用的是我当前选的环境变量就使用这个环境变量。范围小,选了才能用不选不能用
全局变量是我只要写了这个变量,就按照这个变量进行展示。范围大,不管选没选,只要有这个变量名就用这个变量
变量可以随便命名,我设置name的值为王佳,给环境变量名为王佳练习变量参数化
之前这里都是No Environment,我现在选择环境变量为王佳练习变量参数化,然后value的位置写成变量【注:要用两个大括号把变量括起来{{变量}}】然后再发送,查询出的结果和直接在value处写的值的结果是一样的
我在全局变量的位置再增加两个变量,名字同样都是name,当我选择之前设置的环境变量时,会自动出现环境变量,局部变量是浅灰色中间有道杠,就是用不了,是因为局部变量优先级更高
而当我选择了No Environment时,全局变量就是可以用的
不选择环境变量时如果参数的位置有变量,那么默认是全局变量
下面打印出来的日志就是我刚才在全局变量设置的name百里守约
把name设置成王佳,把pwd设置成1111,重新发送
这时可以看到全局变量也随之改变
文档参数化
同样的一个参数,想放不同的内容,比如名字name这个参数,参数内容是张三 李四 王五 赵六 等等,这样用文档参数化
文档格式一般有三种,txt,csv,json
先在桌面建一个文档,我建的是txt的
正式内容的上面一定要写参数名,因为文档参数化是要循环的,如果上面不写参数名第一排的数据就会成为抬头。
点击Run之后会出现下面的页面
运行之后如果都正确会出现下面的页面
postman之关联
什么是关联?
关联一般是多个接口之间进行操作
如果是一个固定的接口,并且内容也是固定的,没有说上一个接口的内容给下一个接口去使用,这就不需要关联
只有上一个接口的内容拿出来放到下一个接口去使用时才需要关联,只有当多个接口之间会产生联系(数据是变化的)才使用关联
关联一共有三种方式
JSON提取器,正则提取器,cookie提取器
JSON提取器
先正常操作你需要数据的那个接口
比如我这个是要获取到token的值(一个随机数,每次登陆token的值都不一样),然后在下一个接口中传入token这个参数
因为我之前已经拿到了token的值,并且存到了全局变量,所以这里直接设置为变量就行
正则提取器
这里需要懂正则表达式
实在不懂也没关系,用工具
正则自动生成器
点击加号,新建项目
然后下面的content括号里边的就是我的正则表达式啦
cookie提取器
三种方式本质都是去拿其值给别的接口使用,关键字不同而已
JSON:json.parse(getResponseBody)
正则 :ResponseBody.match(new RegExp……)
cookie:postman.getResponseCookie(’ ')
总结
最重要的三部分
断言 :
参数化 :
- 文档参数化:同样接口同样参数使用不同的数据
- 变量参数化:环境,全局(如果同时都有,环境优先级高,更多是不同接口使用相同数据)
关联:
- JSON
- 正则
- cookie