基於postman的api自動化測試實踐

陳續淵發表於2019-02-27

測試的好處

每個人都同意測試很重要,但並不是所有人都會去做。每當你新增新的程式碼,測試可以保證你的api按照預期執行。通過postman,你可以為所有api編寫和執行測試指令碼。

postman中的測試

在postman中,你可以通過新增指令碼到請求當中,來使用動態變數、在請求之間傳遞資料以及編寫測試。寫在Pre-request Scripttab中的程式碼會在請求傳送之前執行,而寫在Teststab中的程式碼會在響應到達之後執行。

基於postman的api自動化測試實踐
測試用的語言是JavaScript。所以對於前端開發者來說幾乎沒有學習成本。對於一個單獨的請求來說,如果它有測試指令碼,那麼在請求傳送之後,在Test Resultstab可以看到對應的測試結果。另外為了可以快速編寫測試指令碼,postman提供了一些通用的程式碼片段(code snippets)。如下是對應的功能結構圖:

基於postman的api自動化測試實踐

編寫測試

例子:

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


pm.test("environment to be production", function () { 
    pm.expect(pm.environment.get("env")).to.equal("production");
});

pm.test("response must be valid and have a body", function () {
     pm.response.to.be.ok;
     pm.response.to.be.withBody;
     pm.response.to.be.json;
});

var schema = {
	type: 'object',
	properties: {
		appID: {
			type: 'number',
		},
		avatar: {
			type: 'string',
		}
	}
}
pm.test('Schema is valid', function() {
  var jsonData = pm.response.json().data;
  pm.expect(tv4.validate(jsonData, schema)).to.be.true;
});
複製程式碼

pm.test()

為了遵循postman的規範,所有測試程式碼必須寫在pm.test()的function裡面。第一個引數是該測試的名稱,第二個引數是一個返回boolean值的函式。也就是說這個函式如果返回true,表示測試通過,否則測試失敗。

pm.expect()

這個斷言函式是基於一個JavaScript測試庫ChaiJS BDD構建的。通過類似的語法,你可以很方便的對響應裡的資料或者一些變數進行斷言。

pm.response.to.be.*

這個物件可以提供對響應常見的檢查。如狀態碼是否符合預期等。

tv4.validate()

第一個引數是被檢驗的資料,第二個引數是json schema。通過則返回true,失敗則返回false。如果要快速學習json的schema規範,可以參考https://www.jianshu.com/p/8278eb2458c4?winzoom=1 tv4是postman一個內建的json validator。它基於json-schema draft v4,通過豐富的校驗語法來校驗簡單的值或者複雜的json物件。


常用api詳情請檢視https://learning.getpostman.com/docs/postman/scripts/postman_sandbox_api_reference

執行測試

我們通常會給多個api執行測試,因為我們有很多api,或者一個測試場景由多個api所組成。所以我們會把他們新增到一個集合(Collections)當中來執行。

postman(使用者介面)

基於postman的api自動化測試實踐

基於postman的api自動化測試實踐

基於postman的api自動化測試實踐

這裡注意,請求是按照Collections當中的順序線性執行。如果想改變執行順序,可以修改Collections中的順序,或者使用postman.setNextRequest("request_name");如果想要停止整個流程,可以執行postman.setNextRequest(null);

newman(命令列工具)

1.從postman當中匯出為json格式的Collections

基於postman的api自動化測試實踐
2.全域性安裝newman,npm install -g newman 3.執行命令,newman run sample-collection.json
基於postman的api自動化測試實踐

詳細使用方法請檢視,newman

結合Jenkins自動化

一個通用的方案是在程式碼在提交後,或者合入倉庫分支後,執行 newman -c jenkins_demo.postman_collection --exitCode 1。注意到--exitCode引數,這是為了告訴Jenkins,如果測試失敗,將會返回值為1的退出碼。這樣就Jenkins就可以得知測試執行的成功與否了。

總結

我們都知道,工欲善其事必先利其器。對於基於api的測試而言,postman不失為一個不錯的工具。另外對於web開發人員來說,postman也是一個常用的http除錯工具。熟練的掌握它,也能一定程度地提高我們的工作效率。

相關文章