调试 API 的时候,我们需要经常需要在本地、开发、生产来回切换,还需要面临 Token 失效等的问题,让人头大,看到一些教程有介绍用 Postman 来简化流程,但是实践起来还是遇到一些问题,所以就有了这篇细致地介绍使用 Postman 的 EnvironmentsTests 来简化在不同环境中切换的步骤,无感知地调试 API 的博客

手动更新 Token

  1. Environments 面板中 new 一个新的 Environment (环境),用于存储当前环境的:Token、地址、用户名、密码,需要先填上地址、用户名、密码的 CURRENT VALUE

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

  1. 编写这个 RequestTest(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

  1. 调用获取 Token 的 Request,更新全局 Token

  2. 选择 Collection,然后选择 Edit

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

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

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

自动更新 Token

在切换 Environment 或者 Token 失效的时候,我们都要手动调用获取 Token 的 Request,还是比较麻烦,我们可以进一步自动化,给整个 Collection 都设置上统一的 TestCollection 的任一 Request 的响应体的状态码为 401 (Unauthorized),就重新去获取并更新 Token

  1. 选择 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()
}

  1. 这样一来,如果 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 简化在不同环境中的切换步骤的更多相关文章

  1. 源码推荐(7.17):不规则按钮类似于遥控器按钮,一个可以最大程度简化PageView与TabView切换的第三方框架

    不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右(作者:masa_chu) 不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右 测试环境:Xcode 6.2,iOS 6.0以上 Lazy ...

  2. postman简单教程,如何在请求中引用上次请求返回的值

    做接口测试,一定会遇到这种情况,需要拿上次请求的值在本次请求中使用,比如,我们去测试一个东西,要去登录才能做其他的操作,需要拿到登录返回数据中的某些字段,比如,token啊等... 如果发一次请求,就 ...

  3. Startup在不同环境中的处理

    ASP.NET Core引进了在多种环境中对控制应用程序行为的进一步支持,例如开发环境(Development Environment).预发布环境(Staging Environment),和生产环 ...

  4. 解决Postman发送post数据但是Node.js中req.body接收不到数据的问题[已解决]

    之前编写后台接口,测试数据都是使用的Postman,相当的方便,之前也一直使用get方法,编写Node.js一直没有问题,但是由于要编写一个注册/登陆的功能,所以发送的post数据,后台的逻辑已经编写 ...

  5. postman发送post数据到node.js中

    使用get请求我们很容易的来利用postman来发送数据,但是今天的express在使用postman进行post请求的时候,竟然解析的body是空对象.在网上找了一下果然有解决方法,如下: 因为是P ...

  6. 使用spring提供的ReflectionUtils简化项目中反射代码的复杂性

    在项目中有时候我们会使用到反射的功能,如果使用最原始的方法来开发反射的功能的话肯能会比较复杂,需要处理一大堆异常以及访问权限等问题.spring中提供了ReflectionUtils 这个反射的工具类 ...

  7. postman从body,headers,data中获取token后回写做全局变量

    设置全局变量

  8. hdu 5444 Elven Postman(根据先序遍历和中序遍历求后序遍历)2015 ACM/ICPC Asia Regional Changchun Online

    很坑的一道题,读了半天才读懂题,手忙脚乱的写完(套上模板+修改模板),然后RE到死…… 题意: 题面上告诉了我们这是一棵二叉树,然后告诉了我们它的先序遍历,然后,没了……没了! 反复读题,终于在偶然间 ...

  9. web项目部署在不同环境中需要修改配置文件的解决方法

    web项目部署中存在的配置文件问题: web项目以war包的形式,部署在tomcat中,同时项目需要访问一些其他的东东,例如访问数据库,调用别的项目的API.在开发中,这些需要访问的外部地址通常以配置 ...

随机推荐

  1. 不难懂————Promise对象 + 详解

    1.Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了P ...

  2. Arduino+ESP32 之 驱动GC9A01圆形LCD(二),移植LVGL,跑示例程序,显示自制图片

    在前文Arduino+ESP32 之 驱动GC9A01圆形LCD(一), 我们已经移植好了arduino GFX库, 该库的示例程序内,还有LVGL的示例程序哦. arduino环境下移植lvgl是很 ...

  3. X-former:不止一面,你想要的Transformer这里都有

    原创作者 | FLPPED 参考论文: A Survey of Transformers 论文地址: https://arxiv.org/abs/2106.04554 研究背景: Transforme ...

  4. Web:移动端阻止默认行为的小坑

    问题 移动端 web 开发中,使用 addEventListener 阻止了 touchstart 事件的默认行为却发现没有生效 描述 再移动端 web 开发中,我们一般会用 addEventList ...

  5. AT2645 [ARC076D] Exhausted?

    解法一 引理:令一个二分图两部分别为 \(X, Y(|X| \le |Y|)\),若其存在完美匹配当且仅当 \(\forall S \subseteq X, f(S) \ge |S|\)(其中 \(f ...

  6. python开发: linux进程占用物理内存

    #!/usr/bin/env python #-*- coding:utf-8 -*- ''' 统计linux进程占用的物理内存 ''' import os import sys import sub ...

  7. JAVA多线程学习四 - CAS(乐观锁)

    本文讲解CAS机制,主要是因为最近准备面试题,发现这个问题在面试中出现的频率非常的高,因此把自己学习过程中的一些理解记录下来,希望能对大家也有帮助. 什么是悲观锁.乐观锁?在java语言里,总有一些名 ...

  8. JS 中的GB2312转UTF8和UTF8转GB2312

    转载请注明来源:https://www.cnblogs.com/hookjc/ JS:encodeURI encodeURI(URIString)必选的 URIString 参数代表一个已编码的 UR ...

  9. Protocol类型限制

    1.protocol类型限制 设定情景: 某攻城狮A希望找一个会做饭.洗衣服的女生做女朋友,有国企工作的优先. 满足条件的女生都可以向他发送消息 从题目中我们得到要求 会做饭 会洗衣服 有份好工作 @ ...

  10. Java.lang.Integer类中toString(int i, int radix)的具体实现

    Java.lang.Integer.toString(int i,int radix)方法可以实现将一个int类型的10进制的数据转换为指定进制的数据. api文档中介绍: 返回第二个参数指定的基数中 ...