Postman 使用小技巧/指南

Mazey發表於2021-04-15

一、什麼是 Postman(前世今生)

Postman 誕生於 2013 年,一開始只是 Abhinav Asthana 著手於解決 API 測試的工具,隨著這個工具的使用者和需求迅速激增,Abhinav Asthana 找了他的兩個前同事 Ankit SobtiAbhijit Kane 一起建立了公司 Postman Inc。

創始人

如今 Postman 已經成為一個 API 開發的協作平臺。Postman 簡化了構建 API 的每個步驟,並簡化了協作,這樣就可以更快地建立 API。

二、使用變數

Postman 允許使用者在傳送和接收時使用變數,以提高工作效率和可讀性(不過只能儲存字串型別的值,所以複雜資料型別需要藉助於 JSON.stringify()JSON.parse() 來管理)。

例如在不同執行環境中設定域名地址為變數:

Postman 支援在不同的作用域和上下文中使用變數,遵循就近原則,即如果在 GlobalEnvironment 中都有變數 name,則會取 Environment 中的 name

2.1 變數作用域適用於 Postman 中不同的場景

  • Global:全域性變數可以在整個工作空間(Workspace)中使用,因為無法控制使用環境和容易造成混淆,應當是不可變的全域性常量,謹慎使用。
    pm.globals.set("variable_key", "variable_value");
    pm.globals.get("variable_key");
    
  • Collection:集合變數在單個集合(Collection)中可用,往往具備通用的業務繫結屬性,例如:商品屬性、會員等級、通用祕鑰等。
    pm.collectionVariables.set("variable_key", "variable_value");
    pm.collectionVariables.get("variable_key");
    
  • Environment:環境變數允許請求適應不同的環境,例如:本地、測試、預演和生產環境,常常用來區別請求地址。
    pm.environment.set("variable_key", "variable_value");
    pm.environment.get("variable_key");
    
  • Data: 資料變數來自外部 CSV 和 JSON 檔案,當通過 Newman 或 Runner 來執行時才用到。
  • Local:區域性變數只在單個請求生命週期中可用,執行完成後自動銷燬。
    pm.variables.set("variable_key", "variable_value");
    pm.variables.get("variable_key");
    

2.2 編輯全域性和環境變數

2.3 編輯集合變數

2.4 使用系統內建動態變數

Postman 內建了很多常見場景的動態變數

備註:Postman 支援在 Pre-request Script 和 Tests 中列印除錯資訊,和瀏覽器控制檯一致,可以使用命令:console.log()console.info()console.warn() 和 console.error()

console.log('當前時間戳:', pm.variables.replaceIn('{{$timestamp}}'));
console.log('隨機顏色:', pm.variables.replaceIn('{{$randomColor}}'));
console.log('隨機 IP:', pm.variables.replaceIn('{{$randomIP}}'));
console.log('隨機名字:', pm.variables.replaceIn('{{$randomFullName}}'));
console.log('隨機職業:', pm.variables.replaceIn('{{$randomJobType}}'));
console.log('隨機城市:', pm.variables.replaceIn('{{$randomCity}}'));
console.log('隨機圖片:', pm.variables.replaceIn('{{$randomImageUrl}}'));

# 輸出
當前時間戳:1609060090
隨機顏色:azure
隨機 IP:163.140.207.64
隨機名字:Chester Funk
隨機職業:Coordinator
隨機城市:Port Devinborough
隨機圖片:http://placeimg.com/640/480

三、Postman 請求生命週期

在 Postman 中,一個完整的 Postman 請求生命週期,除了常規的請求(request)和響應(response),還包括前置請求指令碼(pre-request script)和後置測試指令碼(tests script)。Postman 包含一個基於 Node.js 的強大執行態(runtime),允許使用者在 pre-request script 和 tests 事件中編寫 JavaScript 程式碼。

3.1 在前置請求(pre-request script)中使用指令碼

前置請求指令碼(pre-request script)顧名思義就是在請求傳送之前執行的指令碼。

3.2 傳送請求(request)

小技巧一:在連結中使用 :id 自定義路徑引數

小技巧二:Cookie 可編輯

3.3 接收一個響應(response)

小技巧:儲存響應結果

儲存後的結果可以作為案例或記錄以便開發使用。

3.4 在測試(tests)中使用指令碼

Postman 支援在請求響應後通過測試指令碼來驗證請求是否符合預期。

示例一:驗證響應狀態碼是否是 200

pm.test("Status test", function () {
    pm.response.to.have.status(200);
});

示例二:驗證返回的業務資料(JSON)是否符合預期

pm.test("請求成功!", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.message).to.eql('success');
});

四、使用 Postman 抓包

在 Postman 應用程式中有一個內建代理來捕獲 HTTP 請求。

  1. Postman 應用程式監聽客戶端應用程式或裝置發出的任何呼叫。
  2. Postman 代理捕獲請求並將請求轉發給伺服器。
  3. 伺服器通過 Postman 代理將響應返回給客戶端。

4.1 開啟抓包

本機 IP 地址:

手機設定:

4.2 抓包效果

五、使用代理

代理伺服器是一個應用程式或系統,作為計算機和網際網路之間的中介,或者更具體地說就是代表著客戶端和伺服器,向網站、伺服器和其他網際網路服務發出請求。

除了傳遞資訊,代理可以做更多的事情:

  1. 記錄你的機器和網際網路之間的所有流量。
  2. 顯示所有請求、響應、Cookie 和標題的內容。
  3. 路由流量到指定的因特網位置。
  4. 除錯介面。
  5. 防止直接攻擊,保證安全性。
  6. DevOps 負載平衡。

預設情況下,Postman 將使用自帶的系統代理,如果自定義了代理,優先順序將高於自帶的系統代理。

六、使用 Collection Runner

集合執行器(Collection Runner)允許以指定順序執行集合裡面的請求。Collection Runner 將記錄請求測試結果,並且指令碼可以在請求之間傳遞資料。

七、命令列腳手架 Newman

Postman 提供腳手架工具 Newman 來以命令列的方式來執行集合(Collection)請求,其提供和 Postman 桌面端一致的功能,可以整合在工作流的 CI/CD 中。

# 安裝
npm install -g newman

# 執行檔案
newman run mycollection.json

# 執行 URL
newman run https://www.postman.com/collections/cb208e7e64056f5294e5 -e dev_environment.json

八、付費功能

另外 Postman 提供了很多團隊協作需要的付費功能,例如:文件、監控、健康檢查等。

版權宣告

本部落格所有的原創文章,作者皆保留版權。轉載必須包含本宣告,保持本文完整,並以超連結形式註明作者後除和本文原始地址:https://blog.mazey.net/1878.html

相關文章