postman 變數 環境 過濾等

我啥時候說啦jj發表於2017-12-27

[TOC]

之前雖然自己也有用postman來測試api,但都只是最簡單輸入url,傳送,檢視結果,大部分時候跟使用瀏覽器差不多,偶然在簡書首頁看到一篇 API開發神器-Postman , 深感還是得對自己使用的工具多琢磨一下,興許你就發現了寶貝,大大加快開發測試速度了;

這裡沒有打算寫全面的教程,只對我之前沒了解的環境設定/變數使用以及對返回結果進行過濾等操作進行記錄,詳細的文件請看 官網說明 ,另外,我的版本是 4.3.2;

環境(Environmen)

在開發不同階段,可能存在不同的環境(對我碰到的就是伺服器地址/api版本/header資訊等不一樣),比如 debug環境和release環境,每次切換環境測試的時候都得重新配置url資訊,非常麻煩耗時,還容易出錯;

如果能把這些配置資訊抽象成類,不同環境對應不同的例項,初始化設定後,在request請求中通過類/例項成員變數來引用不同的值,從而在需要的時候通過切換環境來選擇不同的配置資訊,這樣不是很方便嗎?

postman就提供了這樣的功能:

環境配置和變數檢視按鈕15111919.png
若已配置過環境,可以通過選擇下方的環境名稱來切換,request中的變數就會使用該環境中的值了...(這是廢話==)

點選上圖下拉選單中的 Manage Environments ,開啟管理環境管理頁面如下:

環境管理頁面

圖中的 app_dev 等環境是我之前已經配置好的,初始是空白介面,點選下方的 add 按鈕來新增一個:

environment.png

Environment Name 中隨便填入便於自己記憶的名稱即可 keyvalue 就填入自己需要的變數名和值即可,可以填入多對;

tip: 如果不同環境的引數基本相同,直接複製一份已配置好的環境資訊,再進行修改即可:

複製已存在的環境資訊

變數說明

在postman中,變數有全域性變數(GlobalVariable)和環境變數(EnvironmentVariable)之分,環境變數就是上面提到的在環境管理中設定的變數,全域性變數可以在不同環境(No environment也算一種環境吧)都可以使用...(好吧,我又囉嗦了,就是生命週期不一樣,一個區域性的一個全域性的);

變數檢視和修改

環境變數除了通過上面介紹的配置環境時進行設定外,還可以通過程式碼進行設定,postman使用javaScript,從下圖的 Pre-request Script 中通過右側的 SNIPPETS 中預定義的常用指令碼可以看到變數的設定方法:

postman.setEnvironmentVariable("variable_key", "variable_value");
postman.setGlobalVariable("variable_key", "variable_value");
複製程式碼

設定變數

變數引用

官網 Environment and global variables 部分有說明; 通過 {{variable_name}} 來使用,可以在 url位址列,Headers,Pre-request Script,Tests中引用:

變數使用

在request之後,這些 {{}} 部分會被替代成實際的值,另外,Pre-request Script 中的指令碼會在執行request請求前先執行,因此可以在裡面預先設定些所需變數,而 Tests 中的指令碼是在request返回後執行的,可以對返回資訊進行提取過濾,舉個栗子,獲取如下返回資訊中的 user_id 值:

// 假設服務端返回的Body內容如下:
{
  "token": {
    "user_id": "2079876912",
    "access_token": "26A90E317DBC1AD363B2E2CE53F76F2DD85CB172DF7D813099477BAACB69DC49C794BAECEDC68331",
    "expires_at": "2016-06-22T12:46:51.637+0800",
    "refresh_token": "26A90E317DBC1AD3CD1556CF2B3923DD60AEBADDCBC1D9D899262A55D15273F735E407A6BEC56B84",
    "mac_key": "4FAhd4OpfC",
    "mac_algorithm": "hmac-sha-256",
    "server_time": "2016-06-15T12:46:51.649+0800"
  }
}
複製程式碼

Tests 中對 user_id 值進行提取並賦值成全域性變數:

// 判斷是否存在 'user_id' 值
tests["Body contains user_id"] = responseBody.has("user_id");
if(tests["Body contains user_id"]){
    // 將返回資訊解析成物件
    var responseData = JSON.parse(responseBody);
    tests["value_user_id"]=responseData.token.user_id
    // 設定全域性變數
    postman.setGlobalVariable("user_id",tests["value_user_id"]);
}else{
    // globals["test_user_id"] 是我在 `Pre-request Script` 中預定義好的一個常量值
    postman.setGlobalVariable("user_id",globals["test_user_id"]);
}
複製程式碼

另外,在介面下方返回資訊中的 Tests 標籤中,程式碼內使用 tests[props_name] 括起來的屬性都會顯示結果:

返回資訊

結合以上所說,我會新建個request用於初始化各種全域性變數,執行完以後再來執行具體的api請求測試

Postman Interceptor

下載地址 這個外掛我有挺喜歡,配合postman很方便,可以直接攔截瀏覽器中的request,記錄到postman中的 history 列表中,所需的header等資訊也都一併處理好了,著實簡單:

Postman Interceptor helps you send requests which use browser cookies through the Postman app. It can also send headers which are normally restricted by Chrome but are critical for testing APIs. The Interceptor makes this process painless. Something that would have required a proxy earlier can now be achieved without any installation steps or extra configuration.

在chrome中啟用攔截器並設定過濾即可

實際試試,可以發現,瀏覽器的各種請求都被記錄到了postman中的history列表中了,同時,請求所需的各種頭資訊也都被整理好了,很方便:

登入Interceptor示例

附帶說一下 runner ,也是挺好用的一個工具,對於整理歸類過的api collections ,可以批量執行,檢查api是否執行正常,具體不再說明,看動態圖:

runner.gif

相關文章