調試 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