Postman接口測試教程 - 環境、附加驗證、文件上傳測試
v1.0
作者:ZBW
前言
繼利用Postman和Jmeter進行接口性能測試之后,我們發現Postman作為一款入門容易的工具,其內置的一些高級功能足夠幫助我們對網站進行全面的接口測試。本文首先將介紹兩個比較關鍵的功能:環境(Environment)和附加代碼(Pre-request Script和Tests),這兩個功能能夠幫助我們對接口進行更加復雜的驗證,如驗證接口返回的信息等。除此之外,本文還將介紹文件上傳測試的運行方式。
注:本文使用Native版本的Postman,以保證功能含有盡可能少的Bug。
配置和使用環境(Environment)
介紹
設想這樣的兩個場景:
- 當我們的項目在開發服務器上開發基本完成,決定向發布服務器部署時,我們不僅想測試開發服務器的功能,還想將同樣的測試應用到部署服務器上。當測試樣例數目很多時,手動修改每個測試中的域名無疑是一件工作量很大而又浪費時間的事情。
- 我們的測試有前后依賴關系,后面的測試需要依賴前面測試返回的內容才可以繼續運行。
Postman中提供了變量(Variable)的概念,專門用於解決以上的問題。特別地,Postman將一組變量成為一個環境(Environment)。具體的說,一個環境可以是一組經常被復用的鍵值對,也可以是將前后測試關聯起來的內容。
使用
1.新建環境
打開Postman,可以看到右上角有No Environment
字樣,說明我們目前沒有應用任何環境變量。
點擊齒輪圖表打開環境的管理頁面:
進入后點擊Add
可以新建一個環境,並看到如下界面。在該界面中可以設置變量的名稱、初值、當前值。點擊Add保存。如果點擊Globals可以配置全局的變量。
2.切換環境
回到開始的界面,點擊No Environment
字樣可以看到剛剛新建的環境,選中即可應用。
3.應用變量
Postman中以{{}}
括起來的內容即為變量。這些內容可以出現在任何地方,包括域名、請求頭、請求參數以及后文敘述的腳本代碼中。例如如果我們想解決以上的第一個問題,可以將每個請求的域名字段改為
{{domain}}/api/to/test
之后配置不同的環境,分別有domain
變量指向不同網址即可。
配置請求前/后腳本
介紹
同樣,試想如下的場景:
- 我們的請求頭中需要包含當前時間戳,以方便服務器進行驗證。但每次運行測試都要輸入一下時間戳非常麻煩,且不夠准確。
- 我們的請求無論結果正確與錯誤與否都會返回HTTP 200,而正確與錯誤由返回內容的部分字段確定,在錯誤時會返回一個錯誤碼用於區別錯誤類型。需要測試工具有對響應內容進行驗證的能力。
- 還是之前的前后測試關聯問題,需要有工具幫忙記錄之前請求返回的變量。
以上的場景分別可以使用Postman附帶的請求前腳本和請求后測試腳本來實現。這兩者本質上都是一段Javascript代碼,由Postman在請求發起前后放在沙盒(Postman Sandbox)中代為執行,並可通過應用Postman對象獲取及修改測試相關的一些信息。
使用
請求前/后腳本的修改均位於配置請求的頁面上,如圖所示。
請求前腳本(Pre-request Scripts)
以前述的獲取時間為例。可以按如下方式編寫腳本,並且在請求頭中使用{{timestamp}}獲取值。
pm.environment.set('timestamp', new Date());
該段代碼中pm為Postman對象,environment可以獲取當前使用的環境變量,set方法可以用於設置一個環境變量。
這樣當運行測試時就會先運行這段代碼獲取時間並賦給timestamp變量。
請求后腳本(Tests)
我們的項目中定義了一些錯誤碼,可以通過錯誤碼驗證服務端是否返回錯誤信息。
1.例如在生成報告的測試中Tests部分添加如下代碼
var jsonData = pm.response.json();
pm.test("Status is right", function () {
pm.expect(jsonData.status).to.eql("success");
});
pm.test("Errorcode is right", function () {
pm.expect(jsonData.errorcode).to.eql("0000");
});
pm.test("ExperimentId is right", function () {
pm.expect(jsonData.experimentId).to.eql("2110114");
});
pm.test("Return a pdf link", function () {
pm.expect(jsonData.link).to.include(".pdf");
});
其中pm.response.json()
可以獲取返回的響應信息並轉為JSON對象。之后使用test
方法和expect
等函數對結果進行驗證。expect
類似於斷言,當在Runner中運行時如果出現檢查不過則測試即使返回HTTP 200 結果也為失敗(Fail)。
2.這里的代碼還可以用於關聯測試。以我們的測試中獲取生成報告的鏈接為例。我們首先請求生成報告的接口,生成一個報告,之后收藏這一報告。
在生成報告的請求的Tests字段中配置
pm.environment.set("pdflink", jsonData.link);
pm.environment.set("reportId", jsonData.experimentId);
並在之后的收藏測試中請求信息為:
link={{pdflink}}&reportId={{reportId}}
這樣以來便可以將之前響應結果傳入后續測試中。
文件上傳類測試
配置文件上傳測試的方式主要分兩步。
1.確定/配置工作路徑
打開Postman的設置,可以看到Working Directory
的設置內容。這里是Postman有權限讀取的文件位置,可以將相關上傳的文件放在這里。
2.在測試中添加文件
在form-data類的請求體中,可以將Key的類型設置為File
,之后點擊選擇文件便可以增加文件了。
特別地,在該測試導出后,如果別人導入到另一台電腦進行測試,那么文件將從其電腦上設置的Postman工作目錄下讀取。