postman实现一次登录所有接口携带token

0. 问题背景

在后端开发过程中,我们需要做接口自测或者问题排查需要使用postman,但是大多数时候我们的系统都是有登录的,这个时候就需要请求携带token,如果每次请求的时候都去请求一次登录接口获取一个token然后再放入接口的header中,就显得很笨。下面就是解决这个问题的步骤。

1. 使用变量

postman是支持变量的,根据不同的作用域,分为全局变量、环境变量、集合变量等。这里我们解决登录token问题是要在所有的接口中起作用的,所以我们这里需要设置的是全局变量。

如上图,我再全局变量里设置了3个变量,可以看到前2个变量是有初始值和当前值的,但是第3个变量auth也就是token是只有当前值的。这是因为在我目前的项目中,前两个变量是固定的,所以我给了一个初始值,那当前值是根据初始值自动填充的,而token由于每次登录都会变化,所以我没有设置初始值,当前值是由脚本填充的。

2. 脚本填充全局变量中的token

每次登录之后会获取有效的token,那么我们在请求登录接口之后拿到token填充到全局变量中不就不用每次去修改token了嘛,所以如下:

如上图,在登录接口的Teststab中,我写了一个脚本(js),拿到返回值中的token,放到全局变量globals中。

var json = pm.response.json();
// 设置全局变量,环境变量是pm.environment
pm.globals.set("auth", json.access_token);

好了,现在实现了每次请求登录接口之后全局变量中的token都会更新,接下来就是如何使用全局变量了。

3. 使用全局变量

在postman中,最顶层的文件夹结构称之为collection

我们可以在collection中做很多操作,比如设置授权相关的东西,例如token。

我们可以看到,这里支持多种类型的授权,我这里选择的API Key就是一种简单k-v结构,然后选择将它添加到header里,那么如果说我每个请求要在请求头里加的不止一个token呢?比我就在globals里加了3个变量,那么可以看到Authorization旁边还有一个Pre-request Script,意思就是请求前的脚本,我们写个脚本将剩余的2个变量放入请求头里就行了。

// 添加新 header
var t_id = pm.globals.get('tenant');
pm.request.headers.add({
    key: 'Tenant-Id',
    value: t_id
});
var a = pm.globals.get('authorization');
pm.request.headers.add({
    key: 'Authorization',
    value: a
});

// 添加或修改已存在 header
// pm.request.headers.upsert({
//     key: 'Connection',
//     value: 'close'
// });

// 移除 header
// pm.request.headers.remove('User-Agent')

4. 验证

打开左下角的控制台可以看到每次接口请求的详细信息

我请求了一个接口,详细信息如下:

可以看到请求头里有我们想要加的3个变量,成功。

posted @ 2022-11-03 14:37  大唐冠军侯  阅读(1744)  评论(0编辑  收藏  举报