使用Postman進行接口測試時,添加斷言十分重要,它是驗證我們的接口是否通過測試的衡量標準。斷言就是判斷響應內容與預期返回是否一致。
Postman可以在請求模塊的Tests標籤添加斷言,比較方便的是,Postman已經提供了一些代碼片段供我們使用。
下面使用一個接口實例來說下如何處理斷言:
如上圖所示,響應body的內容爲一個json格式的字符串,這些內容可以作爲斷言的依據,切換到Tests標籤,控制檯右側可以看到備用的代碼片段。
1.判斷響應內容是否包含某個字符串,點擊選擇【Response body:Contains string】,左側出現如下代碼
其中,pm是postman的主要對象,一般通過它來調用函數、數據等;
Body matches string可以看作這個測試代碼段的描述說明,可以自己定義;
string_you_want_to_search表示預期響應內容,即用來斷言的標準輸出,需要根據實際情況設置;
改爲如下:
代表:判斷響應body中是否包含字符串“error_message”。如果包含,表示斷言結果通過;如果不包含,表示斷言結果不通過。
2.判斷響應內容是否和預期內容完全一致。
點擊選擇【Response body:Is equal to a string】,左側出現如下代碼段
其中,response_body_string處填寫的內容要和接口返回的內容完全一致纔可以匹配成功。
假如響應body內容如下:
那麼需要把所有返回的內容填寫到response_body_string處纔可以。
拷貝響應內容時,把Raw標籤中的原始返回內容放過去即可,這樣避免出現格式問題。
3.判斷返回json數據中某個鍵對應的值
如果響應內容是json格式的字符串,則可以斷言json數據中的某個鍵值對。
點擊選擇【Response body:JSON value check】,左側出現如下代碼段。
其中,Your test name表示這個測試片段的名稱,可以自己任意定義;
jsonData.value表示響應json串中的某個鍵,如果響應內容如下:
所以,jsonData.value可以是json.status或json.desc或json.data。
eql()填寫的預期返回的字符串(把100改爲斷言內容即可)。
最終形式如下:
如果響應內容是嵌套的字典格式,則一層層引用即可,如下:
如果字典中嵌套了列表,則按照索引引用即可,反正要看清響應內容的格式。
4.判斷請求返回的狀態碼是否爲200
點擊選擇【Status code:Code is 200】,左側出現如下代碼段。
5.判斷響應體中某個返回值的類型
點擊選擇【Response body:JSON value check】,然後要把jsonData.value放在一個typeof()函數中,這樣就是判斷輸出值的類型了。
模塊 | 描述 | 示例 |
---|---|---|
Clear a global variable | 清除全局變量 | pm.globals.unset("variable_key"); |
Clear an environment variable | 清除一個環境變量 | pm.environment.unset("variable_key"); |
Get a global variable | 得到一個全局變量 | pm.globals.get("variable_key"); |
Get a variable | 得到一個變量 | pm.variables.get("variable_key"); |
Get an environment variable | 得到一個環境變量 | pm.environment.get("variable_key"); |
Response body:contains string | 檢查response body包含字符串 | pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("string_you_want_to_search"); }); |
Response body:convert XML body to a JSON object | response body:將XML轉換爲JSON對象 | var jsonObject = xml2Json(responseBody); |
Response body:is equal to a string | 檢查響應體等於一個字符串 | pm.test("Body is correct", function () { pm.response.to.have.body("response_body_string"); }); |
Response body:JSON value check | 檢查response body中JSON某字段值 | pm.test("Your test name", function () { var jsonData = pm.response.json(); pm.expect(jsonData.value).to.eql(100); }); |
Response headers:content-Type header check | 檢查content-Type是否包含在header返回 | pm.test("Content-Type is present", function () { pm.response.to.have.header("Content-Type"); }); |
Response time is than 200ms | 響應時間超過200ms | pm.test("Response time is less than 200ms", function () { pm.expect(pm.response.responseTime).to.be.below(200); }); |
Send s request | 發送一個請求 | pm.sendRequest("https://postman-echo.com/get", function (err, response) { console.log(resp onse.json()); }); |
Set a global variable | 設置一個全局變量 | pm.globals.set("variable_key", "variable_value"); |
Set an environment variable | 設置一個環境變量 | pm.environment.set("variable_key", "variable_value"); |
status code:Code is 200 | 狀態碼:代碼是200 | pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); |
status code:Code name has string | 狀態碼:代碼中有指定字符串 | pm.test("Status code name has string", function () { pm.response.to.have.status("Created"); }); |
status code:Successful POST request | 狀態碼:成功的post請求 | pm.test("Successful POST request", function () { pm.expect(pm.response.code).to.be.oneOf([201,202]); }); |
use tiny validator for JSON data | 爲json數據使用tiny驗證器 | var schema = { "items": { "type": "boolean" } }; var data1 = [true, false]; var data2 = [true, 123]; pm.test('Schema is valid', function() { pm.expect(tv4.validate(data1, schema)).to.be.true; pm.expect(tv4.validate(data2, schema)).to.be.true; }); |