使用 Postman 的 Environments 和 Tests 簡化在不同環境中的切換步驟

AaronLin發表於2022-03-04

除錯 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 實踐及命令梳理

相關文章