一、什麼是 Postman(前世今生)
Postman 誕生於 2013 年,一開始只是 Abhinav Asthana 著手於解決 API 測試的工具,隨著這個工具的使用者和需求迅速激增,Abhinav Asthana 找了他的兩個前同事 Ankit Sobti 和 Abhijit Kane 一起建立了公司 Postman Inc。
如今 Postman 已經成為一個 API 開發的協作平臺。Postman 簡化了構建 API 的每個步驟,並簡化了協作,這樣就可以更快地建立 API。
二、使用變數
Postman 允許使用者在傳送和接收時使用變數,以提高工作效率和可讀性(不過只能儲存字串型別的值,所以複雜資料型別需要藉助於 JSON.stringify()
和 JSON.parse()
來管理)。
例如在不同執行環境中設定域名地址為變數:
Postman 支援在不同的作用域和上下文中使用變數,遵循就近原則,即如果在 Global
和 Environment
中都有變數 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 請求。
- Postman 應用程式監聽客戶端應用程式或裝置發出的任何呼叫。
- Postman 代理捕獲請求並將請求轉發給伺服器。
- 伺服器通過 Postman 代理將響應返回給客戶端。
4.1 開啟抓包
本機 IP 地址:
手機設定:
4.2 抓包效果
五、使用代理
代理伺服器是一個應用程式或系統,作為計算機和網際網路之間的中介,或者更具體地說就是代表著客戶端和伺服器,向網站、伺服器和其他網際網路服務發出請求。
除了傳遞資訊,代理可以做更多的事情:
- 記錄你的機器和網際網路之間的所有流量。
- 顯示所有請求、響應、Cookie 和標題的內容。
- 路由流量到指定的因特網位置。
- 除錯介面。
- 防止直接攻擊,保證安全性。
- 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