測試 - Postman篇之斷言


about

postman同樣支持斷言功能,對於接口的斷言,一般來判斷接口返回的結果是否符合預期。

在postman中,使用Test腳本來對接口數據進行判斷。
由於Test腳本會在接口響應后執行,這也意味着,如果有需要在請求結束后要執行的操作都可以在這里執行操作。
除了斷言,也可以在這里對變量進行操作。

Test腳本基於JavaScript語言,使用postman自帶的Test模板(可以減少編寫斷言代碼了), 可以快速的生成用例。

模板 描述 示例
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; });

常見模板用例:

  • 狀態碼判斷
  • 響應文本判斷
  • json值判斷
  • header判斷
  • 響應時間判斷

除了斷言之外,還支持變量的操作,環境變量、全局變量的獲取和修改。

添加/獲取變量系列

獲取變量

正如上面的列表所示,在斷言中可以獲取一個變量、獲取一個全局變量等,我們來做一個獲取全局變量的示例。

如上圖。

  • 第一步,選擇Get global variable
  • 第二步,編寫相關js代碼。
  • 然后我們控制台中就可以查看到打印結果。

添加變量

那如何使用斷言將普通的變量添加到postman的系統環境中呢?這里使用Set an environment variable模板。

其他的關於變量的操作都差不多,這里不再多說了。

一般斷言

還是上面的注冊接口,我們對請求結果,可以加各種判斷,比如根據狀態碼做斷言,判斷返回的json中的字段是否符合預期。

url是:http://www.neeo.cc:6002/pinter/com/register

如上圖,點擊右側的相關斷言模板,然后在修改相應的配置,就完成了斷言校驗,在返回的菜單欄中的Test中,可以看到3個斷言都成功了。

// Status code: is 200
pm.test("判斷 狀態碼 是否為 200", function () {
    pm.response.to.have.status(200);
});

// Response body:JSON value check
pm.test("判斷 code 字段是否為 0 ", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.code).to.eql("0");
});

// Response body:JSON value check
pm.test("判斷 message 是否為 注冊成功", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.message).to.eql("注冊成功");
});

我們來修改一個斷言,看看報錯是怎么玩的, 比如判斷code 字段是否為1。

FAIL為斷言失敗。

上述示例中, jsonData.message它背后使用的是json_path來獲取的json中的值,比如,我們要獲取一個有多層嵌套的字典,我們怎么來寫斷言呢?

如下圖, 我們判斷響應中,要判斷k3的值是否等於c_v3,這種嵌套的怎么寫。

url是http://www.neeo.cc:6001/post

這種嵌套的思路就是,一路點就完了。

我們再來看看其他的斷言,比如判斷接口的返回中是否包含某些字段。

我們來使用webservice的那個接口。

我們來判斷,響應結果中,是否包含別客氣字段。用的是Response body:Contains string模板。

集合公共斷言

對於某一類接口,他們都有一些功能的參數返回值是相同的, 那么我們對於這些公共的字段,來做一個斷言,而不用每個接口都一一做斷言。

我們點擊集合的三點,選擇Edit,在Tests選項,添加兩個斷言語句然后點擊Update,那么,這兩個斷言將作用域當前集合中的每個接口。

在每個接口中,我們只需關注當前接口獨有的斷言接口,公共的斷言都在集合中。

如上圖,我們為當前注冊接口,添加一個獨有的斷言,其他兩個斷言來自於集合中的斷言。其他位於當前集合中的接口,都默認的執行公共的斷言。


歡迎斧正,that's all


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM