除錯 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