主要介绍使用postman进行web api接口主流程场景的回归测试及测试过程中数据构造;主要用到的是get/post请求;以及使用过程中常用的参数化,简单的tests检查点以及如何取登录后的cookies
一、环境准备
1)在chrome中安装插件postman interceptor,这个截图是我已经安装好的
2)安装postman app
二、使用postman拦截post/get请求
1)打开Request Capture开关,并添加filter过滤你希望拦截的请求
2)启动postman app
3)postman中的interceptor开关打开
4)在chrome浏览器操作,发现请求被拦截在postman的history下
5)在collection下新建一个collection
点击切换到history下,点击请求后面的+,直接把请求放到刚刚新建的collection中,方便后期调试
6)导出保存的请求文件
三、调试及参数化post/get请求
以上通过interceptor插件安装的postman app是插件版本的,没有控制台窗口,不方便调试,此时可以在postman官网重新下载个非插件版的app,直接启动这个app
1)导入之前保存的脚本
2)参数化可变的值,从environment文件读取变量
PS:postman读取环境变量常见的有4种,本篇介绍从environment文件中读取
点击manage environments->点击add
然后编辑刚新建的环境变量文件,输入需要引用的变量名和变量值,点击update
在请求中引用环境变量,默认方式{{变量名}}
3)在Pre-request Script 和Tests编写脚本
Pre-request Script 是在请求发送前执行,Tests主要用于添加校验点以及获取response body中值作为下个请求中的参数;
PS:postman常用的方法,可参看官方文档
https://www.getpostman.com/docs/v6/postman/scripts/test_examples
4)调试打印变量,使用cosole.log(需要打印的内容)
首先在Tests中使用cosole.log()方法,比如
打开console
点击send发送请求,发现控制台会打印出值
四、runner 运行collection
点击runner-->选择需要执行的collection-->选择需要用到的环境变量文件-->设置运行参数
PS:常见4类变量作用域:
Global: 全局变量,postman中所有请求都可以访问或者修改;
Environment: 构造请求时可以选择使用某个Environment,这样就可以访问或者修改该Environment下的所有变量;
Local: 脚本中定义的变量,只对脚本的当前作用域有用;
Data: 只有在使用 Collection Runner 的时候,可以通过导入 Data Files 来构造当前测试集中用到的数据。
作用域:Global<Collection<environment<local
1)关于变量引用遇到的问题
如果environment设置的变量,collection运行结束后environment中值无法变更
参考:https://www.cnblogs.com/majunBK/articles/9447021.html
原因:runner运行设置前没有勾选keep variable value,如果不勾选keep variable value,则运行Collection Runner中修改的任何变量都不会影响Postman主应用中对应的环境变量值,在Collection Runner运行完成后恢复environment原始的值
如果运行时勾选keep variable value,则Collection Runner运行完成后Postman主应用中对应的环境变量值变更,主要使用场景:比如第一个collection执行结束后环境变量值需要变更作为第二个collection执行环境变量值的输入
2、遇到的问题
1)runner时报错Data unavailable(Only data about the top 10 historical runs is stored)
详细原因:https://www.jianshu.com/p/b6e934e4601e
可能解决的办法:
1)调整请求执行顺序
2)在容易出现这个错请求的上一个请求tests中加等待时间
setTimeout(()=>console.log('等待'), 3000);
3、常用的方法总结
参考文档https://www.getpostman.com/docs/v6/postman/scripts/test_examples
1)取cookies里面的token
var token = postman.getResponseCookie("a9a68f4fefd3b693f10be4a89799dc48").value
console.log('token123',token);
pm.environment.set("token", token);
2)环境变量
//清楚上一次执行保存的值
pm.globals.unset(onlineTradeNo);
//将订单号传入环境变量
pm.globals.set("onlineTradeNo",onlineTradeNo.data[0].tid);
//获取环境变量
pm.globals.get("AdminIdOne");
3)返回状态校验200
//校验response返回200
tests["Status code is 200"] = responseCode.code === 200;
4)获取response里面的tid
//获取response的body中生成的订单号,如果不是数组的话可直接取
var onlineTradeNo = JSON.parse(responseBody);
console.log("onlineTradeNo",onlineTradeNo.data[0].tid);---数组写法
console.log("onlineTradeNo", onlineTradeNo.data.tid);---非数组
5)从环境变量获取数组中1个值
//取环境变量中待审核的订单状态
var array=pm.environment.get("data_entry");
var value=JSON.parse(array)[0];
// console.log("value is"+" "+value);
//校验状态是否是期望值是否=audit
pm.test("applyStatus is audit", function () {
var jsonData = pm.response.json();
// console.log(jsonData.data.applyStatus);
pm.expect(jsonData.data.applyStatus).to.eql(value);
});
6)Tests中设置等待时间
setTimeout(()=>console.log('等待'), 3000);
setTimeout(function(){}, 3000)
7)在Tests中通过设置脚本控制API的执行顺序
参考文档:https://www.jianshu.com/p/a3b4794ab283
当前请求Tests中添加:postman.setNextRequest('下一个需要执行请求名称')
最后1个请求Tests中添加:postman.setNextRequest("null")
8)for循环的使用,比如根据一个出库单可以查询出2条库存流水,需要把库存流水值相加
//获取出库单(可能是多条)和出库数量(相加)
var DN=pm.environment.get("deliveryOrder");
var number=parseFloat(pm.environment.get("delivery_num"));
var newstocks=0;
for(var i in jsonData.data.data){
if(jsonData.data.data[i].relatedNo == DN){
newstocks += jsonData.data.data[i].newChangeStocks;
}
}
pm.expect(newstocks).to.eql(number)