news 2026/5/6 10:51:00

Postman请求带动态Token?对比脚本变量vs环境变量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Postman请求带动态Token?对比脚本变量vs环境变量

问题描述

在使用postman调试接口时,遇到一些需要在请求里加上token的接口,若token出现变化,需要手动修改接口的token值,带来重复的工作量,翻看postman使用手册后,我发现了两种方法可以解决这个问题。

01 设置全局/环境变量传递

postman中有个全局变量功能,类似js语法中的全局变量,一旦设置了,就可以在每个接口中获取到值,环境变量的功能也类似。

这里以环境变量为例,说说解决思路:

  • 请求一次登录接口,得到token;

  • 在postman中新增一个环境变量devToken,将上一步获取到的token赋值给devToken;

  • 其他请求接口根据需要在请求时带上devToken

  • 如果 devToken显示过期,再次请求一次登录接口,这时会将新的token赋值给devToken

具体实现如下:

在postman中新增一个环境变量devToken

如图所示,打开最新版本的postman,然后点击Environments,就可以看到有Globals和下面的environment空白区域;

Globals区域一般用来存储不会随环境变化的参数而token一般会随环境变化,所以我们还是新建environment参数,点击 “+”:

可以看到多了一个"new environment",这里我们将名字修改为dev;

然后添加一个任意命名的变量(也可以后续在JavaScript脚本里添加,这里为了演示方便,先行添加了),我这里命名为“devToken”:

注意,不要添加initial value和current value,这些都会在我们请求登录接口后设置。

新增完成后,需要将当前环境设置一下:

将获取到的token赋值给devToken

postman在每个接口的Tests区域里,都可以用JavaScript对请求结果做断言结果验证:

如上图所示,右侧是一些常用的写法,这里不做展开阐述,我们用js脚本将验证结果写入到刚才设置的"devToken"里:

  1. pm.test("Status code is 200", function () {

  2. pm.response.to.have.status(200);

  3. });

  4. var data = JSON.parse(responseBody);

  5. if (data.data.agpToken) {

  6. tests["Body has agpToken"] = true;

  7. pm.environment.set("devToken", data.data.agpToken);

  8. }

  9. else {

  10. tests["Body has agpToken"] = false;

  11. }

然后,我们send请求,再查看Test results区域,请求成功:

我们再查看environment里的devToken:

currentValue里有值,说明设置成功

其他请求接口根据需要在请求时带上devToken

如果你想要在其他接口用上devToken,应该写成{{devToken}},如下:

我这里是加在请求头里,其他地方也类似,可以看到,response里code是200,请求成功了。

02 获取预请求得到的token

在每个请求中带上预请求,再获取预请求得到的token

这种解决方式,跟上一种的差别是,需要在每个请求中手动添加一个Pre-request script,会比较麻烦,不过可以保证获取到的token绝对不会过期,不需要多次请求登录接口,实现思路如下:

  • 通过预请求,类似于常见的先登录再访问的方式,预先请求登录接口,获得token;

  • 新建全局变量devToken,将第一步获得的token赋值给devToken,并在请求中带上devToken

具体实现方式如下:

新建全局变量devToken,同样,点击postman右侧菜单栏environment,然后点击“+”号,创建好后如下:

新增完成后,需要将当前环境设置一下:

预先请求登录接口,获得token,并将获得的token赋值给devToken

这一步通过postman的Pre-request script方式实现,具体代码如下:

  1. let userInfo = {"username":"xxxx","password":"xxxx=="}

  2. let requestData = {

  3. url: "http://localhost:8888/auth/login",

  4. method: "post",

  5. header: [

  6. "Content-type: application/json"

  7. ],

  8. body: {

  9. mode: "raw",

  10. raw: JSON.stringify(userInfo)

  11. }

  12. }

  13. pm.sendRequest(requestData, function(err, res){

  14. let rst = res.json();

  15. console.log(rst);

  16. var tokenId = rst.data.tokenId; // 根据自己的返回json结构来获取

  17. console.log(tokenId);

  18. pm.environment.set("tokenId", tokenId);

  19. })

这个区域同样有很多的脚本语言可以参考,具体看右侧,此处按下不表,我们在该请求的pre-request script区域里加上以上脚本:

并在请求头里带上devToken:

然后,我们去发送请求:

查询成功了,并且我们查看environment里的devToken,发现也被赋值了:

需要注意的是,这种设置动态参数的方式,需要在每个request的pre-request script区域里都加上该脚本。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 13:12:18

大厂如何做压测?完整方案设计 + 避坑指南

01 为什么要做压测 1、什么是压力测试? 不断向被测对象施加压力,测试系统在压力情况下的表现。 2、压力测试的目的是什么? 测试得出系统的极限性能指标,从而给出合理的承诺值或者容量告警; 找出系统的性能瓶颈&am…

作者头像 李华
网站建设 2026/5/2 10:23:27

大模型在测试中的应用

随着人工智能技术的快速发展,大语言模型(LLM,Large Language Model)如 OpenAI 的 GPT 系列、Baidu 文心一言、Qwen-2 等正在引领多个领域的技术变革。在软件测试领域,这些大模型通过其强大的自然语言处理和推理能力&am…

作者头像 李华
网站建设 2026/5/1 8:27:33

2026年1月20日人工智能早间新闻

各位读者,早上好。今天是2026年1月20日,星期二。欢迎收看人工智能早间新闻。在瑞士达沃斯,世界经济论坛2026年年会已进入第二天,全球领袖们正在探讨如何驾驭AI带来的深刻变革。与此同时,产业界的动态同样火热&#xff…

作者头像 李华
网站建设 2026/5/3 13:03:51

一文快速了解SEO(初学者必看)

一、先搞懂:SEO到底是什么,搜索引擎怎么工作 SEO的全称是搜索引擎优化,简单来说,就是通过对网站的内容、结构、技术等方面进行合理调整,让搜索引擎能更轻松地发现、理解我们的网站,同时让网站在搜索引擎的…

作者头像 李华
网站建设 2026/4/20 21:08:56

全网最全专科生必看!8款一键生成论文工具测评TOP8

全网最全专科生必看!8款一键生成论文工具测评TOP8 2026年专科生论文写作工具测评:为何需要这份榜单? 随着高校教育的不断深化,专科生在学业中对论文写作的需求日益增加。然而,面对格式规范、内容逻辑、查重要求等多重…

作者头像 李华