我們檢驗一個測試用例是否通過,一般會將我們心理預期的結果與實際結果進行比對,如果結果一致則證明測試通過,如果結果不一致,則證明測試不通過,這即是我們經常所說的斷言。
1、Tests的介紹
Postman中的斷言是使用請求后腳本Tests,是對狀態(tài)碼、響應頭、響應正文等信息進行斷言操作。
在Postman中封裝了我們常見的斷言代碼片段,當然Tests除了可以作為斷言,還可以當做后置處理器。
經常應用于:
- 斷言。
- 獲取當前接口的響應數據,傳遞給下一個接口。
提示:在一個請求或者一個集合都可以定義
Tests,在集合中定義Tests,表示集合中的每一個請求響應后,都需要執(zhí)行Tests中的斷言腳本。
點擊請求中的Tests標簽項,如下圖:

我們可以在上圖看到,在Tests標簽頁的右側邊欄中,Postman為我們提供了一些常用的代碼模版。
提示我們:
Test scripts are written in JavaScript, and are run after the response is received.
測試腳本用JavaScript編寫,并在收到響應后運行。
Learn more about tests scripts
點擊這里,可以學習更多關于測試腳本的資料。
這里學習關于
Tests的更多用法:
https://go.pstmn.io/docs-test-scripts
總結:
(1)Postman測試沙箱的執(zhí)行順序:
- 在發(fā)送Request之前,執(zhí)行
Pre-request Script中的js腳本,可定制化Request(準備數據)。 - 收到Response之后,執(zhí)行
Tests中的腳本,處理返回的數據(斷言或者處理數據)。
整個流大概是這樣的:

(2)Postman中Tests的作用:
- 做斷言:可以斷言狀態(tài)碼或者斷言返回數據中的字段。
- 取返回值:做流程接口的時候,向下傳遞返回數據。
2、常用SNIPPETS(片段)說明
(1)常用變量相關
-
Get an environment variable:獲取一個環(huán)境變量。 -
Get a gloval variable:獲取一個全局變量。 -
Get a variable:獲取一個變量(本地)。 -
Set an environment variable:設置一個環(huán)境變量。 -
Set a global variable:設置一個全局變量。 -
Clear an environment variable:清空一個環(huán)境變量。 -
Clear a global variable:清空一個全局變量 。
使用:
- 獲取變量:如果在下一個請求中用到上一個請求的返回值,可以使用“設置一個環(huán)境變量”,將請求的返回值設置為環(huán)境變量,在下一個請求中,使用“獲取一個環(huán)境變量”取到該值。
- 清空變量:這里的清空等于刪除變量,一個參數使用完成后,需要刪除,或者清空值都可以使用該方法。
(同前一篇Pre-request Script的使用方式一樣)
(2)狀態(tài)碼相關
-
Status code: Code is 200:判斷狀態(tài)碼是否正確;默認判斷狀態(tài)是否為 200, 可修改。pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); -
Status code:Successful POST request:
判斷狀態(tài)碼是否為預期結果之一;比如默認斷言狀態(tài)碼是否是 201, 202 中的一個。pm.test("Successful POST request", function () { pm.expect(pm.response.code).to.be.oneOf([201, 202]); }); -
Status code:Code name has string
判斷狀態(tài)碼描述是否包含字符串,比如是否包含 Created。pm.test("Status code name has string", function () { pm.response.to.have.status("Created"); });
(3)響應結果斷言:
-
Response body: Contains string:響應結果是否包含字符串;
注意:這只能檢查Response body中raw格式展示的返回數據,如果raw格式展示的返回數據中,有中文數據未解碼,也只能匹配未解碼形式的內容,且匹配包含不唯一(工作中很少見,一般接口返回數據中不會設計重復字段)。
pm.test("Body matches string", function () { // 比如raw中的數據,“學院”沒有進行Unicode解碼,就只能如下方式進行比對。 pm.expect(pm.response.text()).to.include("例如:\u5b66\u9662"); }); -
Response body: JSON value check:響應結果如果是 JSON格式的數據,檢查具體的 JSON字段的值;
實際工作中基本就用這個方式。(下面有練習好好看看)
pm.test("Your test name", function () { var jsonData = pm.response.json(); pm.expect(jsonData.value).to.eql(100); }); -
Response body: Is equal to a string:響應結果與字符串是否全部匹配預期的字符串;
就是在把Response body的數據用raw格式展示,然后全部復制到下面位置。
pm.test("Body is correct", function () { pm.response.to.have.body("raw格式展示的返回數據,全部復制到這里"); }); -
Response body: Convert XML body to a JSON Object:
將 XML 轉換成 JSON;var jsonObject = xml2Json(responseBody);
等等還有很多,用的時候我們可以查看相關文檔。
(4)Header :
Response headers:Content-Type header check
響應頭部中是否包含字段,代碼片段如下:
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type(這里填寫請求頭屬性)");
});
(5)響應速度:
Response time is less than 200ms
響應時間是否少于多少 ms。
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});