利用Postman Collection的Pre-request Script获得token

使用Postman Collection的Pre-request Script是一种非常简单高效的获取token的方法。Pre-request Script可以编写成用来在发送请求之前生成访问token的代码片段。每次运行Collection中的请求时,Pre-request Script都会先运行并获取token。   —— 我和AI一起编

我负责的项目设置的 token 过期时间是 24 小时,每个接口每天都要换个 token。

之前的处理办法是单独设置了一个 login 请求,保存 token 为变量,然后每个请求的 Header 都要设置一下参数,去读这个变量。有一些很难描述的麻烦,经常新搞的接口昨天还好好地,因为忘了改成读变量,第二天就挂了。

之前也知道 Postman 有 token 管理,一直没有用。正好在学那个 Postman 15days,干脆进化一下,简单又省事。

在 Collection 的 Authorization 中,选择需要的 token 类型,将 token 设置为变量。具体是设置为 Collection 变量还是设置为环境变量,这就见仁见智了,看个人需要。我经常需要切换不同的用户,基本每个 Collection 都是基于一个用户角色写的,所以就设置为 Collection 变量了。

我的脚本如下:

var checkDate = pm.collectionVariables.get("tokenDate")
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1; // January is 0!
var yyyy = today.getFullYear();

if (dd < 10) {
    dd = '0' + dd;
}

if (mm < 10) {
    mm = '0' + mm;
}

today = yyyy + '-' + mm + '-' + dd;

if (checkDate != today) {
    const postRequest = {
        url: pm.environment.get("域名变量") + '请求API',
        method: 'POST',
        header: {
            'Content-Type': 'application/json',
            'X-Foo': 'bar',
            'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
        },
        body: {
            mode: 'raw',
            raw: JSON.stringify({
                字段: pm.environment.get("用户名")
            })
        }
    };
    pm.sendRequest(postRequest, (error, response) => {
        console.log(error ? error : response.json());
        pm.collectionVariables.set("jwkToke", response.json().data.jwtToken);
        pm.collectionVariables.set("tokenDate", today)
    });
}

如果每个接口请求的时候都去获取一次 token 没有什么必要,因为我这边的业务是一天过期,所以我加了一个变量进行判断,如果是今天已经获取过了,就不再请求了,算是优化了一下执行效率。