Postman自动提取Token教程:告别手动复制,提升接口测试效率

1、说明

在接口测试过程中,Token鉴权是最常见的身份验证方式之一。很多新手在使用Postman测试接口时,都会遇到一个繁琐的问题:每次获取Token后,需要手动复制粘贴到后续需要鉴权的请求中,不仅耗时,还容易出现复制错误、漏复制的情况,严重影响测试效率。

今天就给大家分享一个Postman实用技巧——通过Tests脚本自动提取请求返回的Token,并赋值给变量,后续接口直接引用变量即可,彻底告别手动复制粘贴,让接口测试更高效、更流畅。

示例

t1

// 1. 解析响应的 JSON 数据
const responseData = pm.response.json();
// 2. 提取 access_token 并做安全校验
if (responseData && responseData.access_token) {
    // 将 access_token 存入环境变量(推荐)
    pm.environment.set("x-amz-access-token", responseData.access_token);
}

1、前置准备:创建环境变量(推荐,更规范)

在开始提取Token之前,建议先创建一个环境变量,用于存储提取到的Token。环境变量的优势在于可以实现多环境切换(如开发环境、测试环境、生产环境),后续更换环境时,无需修改脚本,只需切换环境即可。

  1. 打开Postman,点击右上角的「眼睛图标」(Environment Quick Look),在弹出的面板中点击「Add」,创建一个新的环境。
  2. 给环境命名(如「Dev-开发环境」「Test-测试环境」),在「Variables」列表中,添加两个变量:access_tokenrefresh_token,初始值留空即可(后续由脚本自动赋值)。
  3. 创建完成后,在右上角的环境下拉框中,选中刚刚创建的环境,确保后续脚本操作针对该环境生效。

如果只是临时使用,也可以不创建环境变量,直接使用全局变量,但更推荐使用环境变量,便于管理和维护。

2、核心操作:编写Token提取脚本(适配你的响应结构)

重点来了!根据你提供的Token响应JSON结构,我已经编写好了适配的提取脚本,无需修改,直接复制粘贴即可使用。先来看下你的响应结构:

{
    "access_token": "Atza|IwEBIJX8-RgjyXu7GIZy2fBvagd0T0xqHinrWi8W29U7IkVpu29ghL8VxSJc1LNe4zkJ8XpB8qHEN1jZ-NXKwi8XufWINvgBc-pb4KzewWKqXLspKnE8iKs2ssXczdpBb4x_w0Vhplpuk5p35NK3X-TEczJLlMUnSO9i_9jugjo4CPTAICiz2rJrV0YzMa8C8gIz_U9HgmAmNNVEd1HpD7IuAPN9ELJw2b5EBS2oeL5exbeiVFrb5mdzPOTvQ1rRxphO19VqV4IaGK_8BJjvZwYRfg45unWU92fAfZ81vH3F-D-81aM-QnnJlauZoAL3R1roJeKC9M0fG7VMcdPIo2Gr-B7O",
    "refresh_token": "Atzr|IwEBIFmDW8zJEe6CHxUvJpam8XwfpkD-C5bN-tTPXleiwTNvXCVLW6-GwX2taNYE7MIjtd46LzzdSIT3gDfExTWCMNDYFeqNY3V3NIn7Et1H79n34RrF20K_ICE-jSEquLnlaolRapOk8QmT7ZjRmRy1yfRzFSAxsV-5JecNpAyaAGsTBga5Liml0Z9VTaikNCYwuJS5DPtGxZWwduf4XtoZdHuwkMfrlJOmkuaYNWD5RQTFMzECJM6HbDpCGPtuLFKuSNSvjRWwemr0NGHEHOHd0sv8qkLY3jjB93J_50_H5y03xbZapvb45RICxmYcXWrwP48",
    "token_type": "bearer",
    "expires_in": 3600
}

响应中包含 access_token(访问令牌)和 refresh_token(刷新令牌),脚本将同时提取这两个值,并自动存入环境变量。

脚本编写步骤:

  1. 打开你用于获取Token的请求(如登录请求),切换到「Tests」标签页(Tests标签用于编写响应后执行的脚本)。
  2. 清空Tests标签页中的原有内容,复制下面的完整脚本,粘贴进去即可。

3、完整提取脚本(可直接复制使用)

// 1. 解析请求返回的JSON响应数据
const responseData = pm.response.json();

// 2. 提取access_token和refresh_token,并做安全校验(避免响应异常导致赋值失败)
if (responseData && responseData.access_token) {
    // 将access_token存入环境变量(核心操作)
    pm.environment.set("access_token", responseData.access_token);
    
    // 可选:同时提取refresh_token存入环境变量(后续刷新Token时可用)
    if (responseData.refresh_token) {
        pm.environment.set("refresh_token", responseData.refresh_token);
    }
    
    // 控制台打印日志,方便调试(可在Postman左下角🔍查看控制台)
    console.log("✅ Token提取成功!");
    console.log("access_token已存入环境变量:", responseData.access_token);
    if (responseData.refresh_token) {
        console.log("refresh_token已存入环境变量:", responseData.refresh_token);
    }
} else {
    // 提取失败时给出明确提示,便于排查问题
    console.error("❌ Token提取失败!请检查响应结构是否正确。");
    console.error("当前响应数据:", responseData);
    
    // 可选:添加测试断言,让请求结果直接显示失败(便于快速发现问题)
    pm.test("提取access_token失败", () => {
        pm.expect(responseData.access_token).to.not.be.undefined;
    });
}

4、脚本说明:为什么这么写?

很多新手可能会疑惑,为什么脚本要加这么多判断?其实这是为了提升脚本的稳健性,避免因响应异常(如接口报错、返回结构变化)导致脚本执行失败,具体说明如下:

  • pm.response.json():用于解析响应的JSON数据,将其转为JavaScript对象,方便提取字段。
  • if (responseData && responseData.access_token):判断响应数据是否存在,且包含access_token字段,避免因接口返回错误(如404、500)导致脚本报错。
  • pm.environment.set("access_token", responseData.access_token):将提取到的access_token赋值给环境变量,后续可通过{{access_token}}引用。
  • 控制台日志:便于调试,若提取失败,可通过左下角控制台查看具体原因(如响应结构错误、Token字段缺失)。
  • 测试断言:可选配置,若提取失败,请求结果会显示「Failed」,直观提醒我们排查问题,无需手动查看控制台。

5、后续使用:如何引用提取的Token?

脚本执行成功后,access_token 已经自动存入环境变量,后续需要鉴权的接口,直接引用该变量即可,无需再手动复制粘贴。

最常见的引用场景(Bearer Token鉴权):

  1. 打开需要鉴权的请求,切换到「Headers」标签页。
  2. 添加一条Header:
    1. Key:Authorization(大多数接口的鉴权Header键名,若接口有特殊要求,按接口文档修改)
    2. Value:Bearer {{access_token}}(注意「Bearer」后面有一个空格,{{access_token}}是引用环境变量的语法)
  3. 发送请求,Postman会自动将{{access_token}}替换为环境变量中存储的Token,接口即可正常通过鉴权。

如果接口的Token引用方式不同(如放在Params或Body中),直接在对应位置写入{{access_token}}即可,用法一致。

6、避坑指南:新手常犯的3个错误

  1. 忘记选中环境:脚本是将Token存入环境变量的,若未选中创建的环境,脚本会执行失败,或Token存入错误的环境中。
  2. 响应结构匹配错误:如果后续接口返回的Token字段名变化(如从access_token改为token),需要修改脚本中的responseData.access_token,否则无法提取。
  3. Bearer后面漏加空格:很多新手会忽略「Bearer」后面的空格,导致接口鉴权失败,记住Value的格式是「Bearer + 空格 + {{access_token}}」。

6、进阶技巧:自动刷新Token(可选)

你的响应中包含expires_in: 3600,说明Token的有效期是3600秒(1小时),过期后需要重新获取。如果测试时间较长,可设置自动刷新Token,无需手动点击登录请求。

实现方式:在需要鉴权的接口集合中,添加「Pre-request Script」(请求前执行的脚本),脚本会在每次发送请求前,检查Token是否过期,若过期则自动发送登录请求获取新Token,具体脚本如下(可根据你的登录接口修改):

// 检查环境变量中的access_token是否存在,若不存在或过期,自动刷新
const accessToken = pm.environment.get("access_token");
if (!accessToken) {
    // 发送登录请求,获取新Token
    pm.sendRequest({
        url: "你的登录接口地址", // 替换为你的实际登录接口
        method: "POST",
        header: { "Content-Type": "application/json" },
        body: {
            mode: "raw",
            raw: JSON.stringify({
                username: "你的登录账号",
                password: "你的登录密码"
            })
        }
    }, (err, res) => {
        if (err) {
            console.error("❌ 自动刷新Token失败:", err);
            return;
        }
        const data = res.json();
        // 将新的Token存入环境变量
        pm.environment.set("access_token", data.access_token);
        pm.environment.set("refresh_token", data.refresh_token);
        console.log("✅ Token自动刷新成功!");
    });
}

7、总结

通过Postman的Tests脚本自动提取Token,看似是一个小技巧,却能极大提升接口测试的效率,尤其适合需要频繁测试多个鉴权接口的场景。本文的脚本已经完全适配你的响应结构,直接复制粘贴即可使用,新手也能快速上手。

掌握这个技巧后,你再也不用手动复制粘贴Token,把更多时间花在接口逻辑测试上,提升工作效率的同时,也能减少人为错误。如果你的接口响应结构有变化,或者有其他Postman使用问题,欢迎在评论区留言交流~

posted @ 2026-03-02 10:40  pine007  阅读(3)  评论(0)    收藏  举报