測試的好處
每個人都同意測試很重要,但並不是所有人都會去做。每當你新增新的程式碼,測試可以保證你的api按照預期執行。通過postman,你可以為所有api編寫和執行測試指令碼。
postman中的測試
在postman中,你可以通過新增指令碼到請求當中,來使用動態變數、在請求之間傳遞資料以及編寫測試。寫在Pre-request Script
tab中的程式碼會在請求傳送之前執行,而寫在Tests
tab中的程式碼會在響應到達之後執行。
Test Results
tab可以看到對應的測試結果。另外為了可以快速編寫測試指令碼,postman提供了一些通用的程式碼片段(code snippets)。如下是對應的功能結構圖:
編寫測試
例子:
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(使用者介面)
這裡注意,請求是按照Collections當中的順序線性執行。如果想改變執行順序,可以修改Collections中的順序,或者使用postman.setNextRequest("request_name")
;如果想要停止整個流程,可以執行postman.setNextRequest(null);
newman(命令列工具)
1.從postman當中匯出為json格式的Collections
2.全域性安裝newman,npm install -g newman
3.執行命令,newman run sample-collection.json
詳細使用方法請檢視,newman
結合Jenkins自動化
一個通用的方案是在程式碼在提交後,或者合入倉庫分支後,執行
newman -c jenkins_demo.postman_collection --exitCode 1
。注意到--exitCode引數,這是為了告訴Jenkins,如果測試失敗,將會返回值為1的退出碼。這樣就Jenkins就可以得知測試執行的成功與否了。
總結
我們都知道,工欲善其事必先利其器。對於基於api的測試而言,postman不失為一個不錯的工具。另外對於web開發人員來說,postman也是一個常用的http除錯工具。熟練的掌握它,也能一定程度地提高我們的工作效率。