使用 Postman 的 Environments 和 Tests 简化在不同环境中的切换步骤
调试 API 的时候,我们需要经常需要在本地、开发、生产来回切换,还需要面临 Token 失效等的问题,让人头大,看到一些教程有介绍用 Postman 来简化流程,但是实践起来还是遇到一些问题,所以就有了这篇细致地介绍使用 Postman 的 Environments 和 Tests 来简化在不同环境中切换的步骤,无感知地调试 API 的博客
手动更新 Token
- 在
Environments面板中new一个新的Environment(环境),用于存储当前环境的:Token、地址、用户名、密码,需要先填上地址、用户名、密码的CURRENT VALUE

- 在
Collections中添加一个新的Collection(集合),名字为 Demo,点击右键选择Add Request添加一个获取 Token 的 Request。注意右上角的 Environment 需要选择刚才定义的,这样才可以通过{{}}获取到 Environment 中变量的值。这里的 base URL、账号、密码都可以根据实际请求的情况进行设置

- 编写这个
Request的Test(Test会在请求执行后自动运行),编写Test目的是为了在请求后自动更新当前 Environment 的 Token,写完就点击Send发送请求。点击右上角的眼睛,可以快速查看当前 Environment 变量

// 判断相应的状态码是否为 200
pm.test("Status code is 200", function () {
console.log((pm.response))
pm.response.to.have.status(200);
});
// 更新当前 Environment 的 Token
console.log(pm.response.json())
var token = pm.response.json().token
pm.environment.set("token", token);
使用 Request
调用获取 Token 的
Request,更新全局 Token选择
Collection,然后选择Edit

- 给整个
Collection都设置上统一的Authorization,Type 设置为Bearer Token,Token 值则设置为{{token}},就是上面设置进Environment的变量

- 新建一个
Request,Authorization选择Inherit auth from parent(继承父级的 auth),这样就可以避免手动填写 Token 了

- 之后再使用就可以直接点击
Duplicate,复制一个新的Request来使用

自动更新 Token
在切换 Environment 或者 Token 失效的时候,我们都要手动调用获取 Token 的 Request,还是比较麻烦,我们可以进一步自动化,给整个 Collection 都设置上统一的 Test,Collection 的任一 Request 的响应体的状态码为 401 (Unauthorized),就重新去获取并更新 Token
- 选择
Collection,然后选择Edit,编辑Tests
// 定义发送登录请求的方法
function sendLoginRequest() {
// 定义请求体
var data = {
"password": pm.environment.get("password"),
"telephone": pm.environment.get("username")
}
console.log(data)
// 构造一个 POST 请求
var baseUrl = pm.environment.get("base_url")
const loginRequest = {
url: baseUrl + '/admin_access_tokens',
method: 'POST',
header: 'Content-Type:application/json',
body: {
mode: 'raw',
raw: JSON.stringify(data)
}
};
// 发送请求
pm.sendRequest(loginRequest, function (err, res) {
if (err) {
console.log("err:" + err);
} else {
const jsonData = res.json();
// 自动更新 Collection 的 Token
console.log("获取到的 token:" + jsonData.token)
var token = jsonData.token
pm.environment.set("token", token);
console.log("更新全局变量 token 成功")
}
});
}
if (pm.response.code === 401) {
// 如果当前返回的状态码是 401,就更新 token
sendLoginRequest()
}

- 这样一来,如果 Token 错误,它会自动重新获取并更新 Token,只需要再点一次
Send就可以正常请求了
原理就是这个样子,如果想在不同环境中自由切换,只需要定义多个 Environment 即可,使用时只需要在右上角就可以轻松切换。如果想每次请求都直接去获取新 Token 也可以用 Pre-request Script;登录是带验证码的也可以参考:关于若依需要验证码,PostMan是如何登陆流程,总而言之,用上了这个 Tips 之后幸福感 up up up
参考资料
Learning Center - Postman
Postman 使用小技巧/指南
postman 一个也许可以节省你大量时间的小技巧
Postman设置全局变量token,自动更新token,统一设置headers(Authorization)
Postman在pre-request Script中执行登录获取token
推荐阅读:
开源≠免费 常见开源协议介绍
简单的 Shell 脚本入门教程
Docker 实践及命令梳理
使用 Postman 的 Environments 和 Tests 简化在不同环境中的切换步骤的更多相关文章
- 源码推荐(7.17):不规则按钮类似于遥控器按钮,一个可以最大程度简化PageView与TabView切换的第三方框架
不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右(作者:masa_chu) 不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右 测试环境:Xcode 6.2,iOS 6.0以上 Lazy ...
- postman简单教程,如何在请求中引用上次请求返回的值
做接口测试,一定会遇到这种情况,需要拿上次请求的值在本次请求中使用,比如,我们去测试一个东西,要去登录才能做其他的操作,需要拿到登录返回数据中的某些字段,比如,token啊等... 如果发一次请求,就 ...
- Startup在不同环境中的处理
ASP.NET Core引进了在多种环境中对控制应用程序行为的进一步支持,例如开发环境(Development Environment).预发布环境(Staging Environment),和生产环 ...
- 解决Postman发送post数据但是Node.js中req.body接收不到数据的问题[已解决]
之前编写后台接口,测试数据都是使用的Postman,相当的方便,之前也一直使用get方法,编写Node.js一直没有问题,但是由于要编写一个注册/登陆的功能,所以发送的post数据,后台的逻辑已经编写 ...
- postman发送post数据到node.js中
使用get请求我们很容易的来利用postman来发送数据,但是今天的express在使用postman进行post请求的时候,竟然解析的body是空对象.在网上找了一下果然有解决方法,如下: 因为是P ...
- 使用spring提供的ReflectionUtils简化项目中反射代码的复杂性
在项目中有时候我们会使用到反射的功能,如果使用最原始的方法来开发反射的功能的话肯能会比较复杂,需要处理一大堆异常以及访问权限等问题.spring中提供了ReflectionUtils 这个反射的工具类 ...
- postman从body,headers,data中获取token后回写做全局变量
设置全局变量
- hdu 5444 Elven Postman(根据先序遍历和中序遍历求后序遍历)2015 ACM/ICPC Asia Regional Changchun Online
很坑的一道题,读了半天才读懂题,手忙脚乱的写完(套上模板+修改模板),然后RE到死…… 题意: 题面上告诉了我们这是一棵二叉树,然后告诉了我们它的先序遍历,然后,没了……没了! 反复读题,终于在偶然间 ...
- web项目部署在不同环境中需要修改配置文件的解决方法
web项目部署中存在的配置文件问题: web项目以war包的形式,部署在tomcat中,同时项目需要访问一些其他的东东,例如访问数据库,调用别的项目的API.在开发中,这些需要访问的外部地址通常以配置 ...
随机推荐
- 不难懂————Promise对象 + 详解
1.Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了P ...
- Arduino+ESP32 之 驱动GC9A01圆形LCD(二),移植LVGL,跑示例程序,显示自制图片
在前文Arduino+ESP32 之 驱动GC9A01圆形LCD(一), 我们已经移植好了arduino GFX库, 该库的示例程序内,还有LVGL的示例程序哦. arduino环境下移植lvgl是很 ...
- X-former:不止一面,你想要的Transformer这里都有
原创作者 | FLPPED 参考论文: A Survey of Transformers 论文地址: https://arxiv.org/abs/2106.04554 研究背景: Transforme ...
- Web:移动端阻止默认行为的小坑
问题 移动端 web 开发中,使用 addEventListener 阻止了 touchstart 事件的默认行为却发现没有生效 描述 再移动端 web 开发中,我们一般会用 addEventList ...
- AT2645 [ARC076D] Exhausted?
解法一 引理:令一个二分图两部分别为 \(X, Y(|X| \le |Y|)\),若其存在完美匹配当且仅当 \(\forall S \subseteq X, f(S) \ge |S|\)(其中 \(f ...
- python开发: linux进程占用物理内存
#!/usr/bin/env python #-*- coding:utf-8 -*- ''' 统计linux进程占用的物理内存 ''' import os import sys import sub ...
- JAVA多线程学习四 - CAS(乐观锁)
本文讲解CAS机制,主要是因为最近准备面试题,发现这个问题在面试中出现的频率非常的高,因此把自己学习过程中的一些理解记录下来,希望能对大家也有帮助. 什么是悲观锁.乐观锁?在java语言里,总有一些名 ...
- JS 中的GB2312转UTF8和UTF8转GB2312
转载请注明来源:https://www.cnblogs.com/hookjc/ JS:encodeURI encodeURI(URIString)必选的 URIString 参数代表一个已编码的 UR ...
- Protocol类型限制
1.protocol类型限制 设定情景: 某攻城狮A希望找一个会做饭.洗衣服的女生做女朋友,有国企工作的优先. 满足条件的女生都可以向他发送消息 从题目中我们得到要求 会做饭 会洗衣服 有份好工作 @ ...
- Java.lang.Integer类中toString(int i, int radix)的具体实现
Java.lang.Integer.toString(int i,int radix)方法可以实现将一个int类型的10进制的数据转换为指定进制的数据. api文档中介绍: 返回第二个参数指定的基数中 ...