在日常开发中我们经常以两种情景:
- 因为接口部署在不同的环境(一般至少是三个,开发,测试和线上),所以我们在测试接口时需要来回切换它的url,或是同样的接口要分成至少三份
- 有些b端项目中对于 token 的时效性要求比较苛刻,我现在做的这个项目token的有效时间只有10分钟,很明显我们不可能把时间浪费在获取token上,但是我们在发送请求的时候又要带上有效的 token ,那么我们必然要在测试接口之前发送一个获取 token 的请求
很幸运,postman 完全可以解决以上需求,
第一个需求需要 postman 中的全局或者局部变量即可实现,
首先打开 postman ,我们可以看到右上角那里有个眼睛按钮,以及它右侧的目录按钮,详情如图
建议先点开目录按钮,在里面增加作用域,否则的话,如果都挂在 global上面,容易引起变量污染, 比如我这个展示的这个项目名为 cigoadmin , 那么我就增加一个作用域 cigoadmin ,那么我在里面增加的变量就不会受到其他项目的影响了,点开如下图:
可以直接在里面增加变量,当然也可以在下拉框那里选好作用域,然后点击眼睛按钮,在里面增加变量,然后即可在该作用域下使用这个变量了,如上图所示的 url ,使用时只需要用双大括号括住,把变量放进去即可。这样的话,我们只需要在里面增加三个变量,url,testurl,onlineurl分别代表着开发,测试和线上环境,我们测试的时候只需要稍微修改一下即可。
至于第二个,我们可以在 pre-request-script 去具体实现
首先,看一下 pre-request-script 是什么,顾名思义,就是在执行当前接口之前所执行的操作。
其次,看一下 pre-request-script 能干什么,在此之前我们需要了解到 Postman Sandbox,Postman Sandbox是一个JavaScript执行环境,我们可以在编写预请求脚本和测试脚本时可用。在这个沙箱中执行我们在 pre-request-script /tests 脚本部分中写入的代码。换句话说就是,我们可以在这里面编写js脚本,然后这些脚本会在发送当前接口之前执行完毕。
最后,看一下 pre-request-script 怎么使用:
比如,后端同学需要我们每次传参的时候都要带上当时的时间戳,我们完全不必每次在控制台去打印,然后在copy过去,因为里面是支持js的,我们直接在里面编写js代码即可,唯一的区别就是将这个变量共享到 headers 或者 body 中所使用的代码有些特殊而已,具体代码如下:
var date = new Date();
date=Math.round(date/1000)
pm.environment.set("timestampHeader", date);
下图为具体使用方式:
接下来就是重头戏了:
在 pre-request-script 中编写请求
下面是例子
var data = {
"user":"admin",
"psw":"123456"
}
// 获取环境信息
pm.environment.get("url")
const echoPostRequest = {
url: 'url'+'/v1/xxx',
method: 'POST',
header:'Content-Type:application/json',
body: {
mode: 'raw',
raw: JSON.stringify(data)
}};
pm.sendRequest(echoPostRequest, function (err, res) {
console.log(res.json());
});
console 面板
postman 既然支持js的编写,同样也是支持js的调试的,它有 console 面板供我们查看接口信息的,点击左下角的 console 按钮
即可弹出console面板
然后我们就能够在里面看到我们刚刚打印出来的信息了,最后,将 token 按照上面同样的操作将该值存在环境变量中,然后在 header 或者 body 中用大括号调取即可