我們檢驗(yàn)一個(gè)測(cè)試用例是否通過(guò),一般會(huì)將我們心理預(yù)期的結(jié)果與實(shí)際結(jié)果進(jìn)行比對(duì),如果結(jié)果一致則證明測(cè)試通過(guò)颂碘,如果結(jié)果不一致,則證明測(cè)試不通過(guò)椭迎,這即是我們經(jīng)常所說(shuō)的斷言。
1田盈、Tests的介紹
Postman中的斷言是使用請(qǐng)求后腳本Tests
畜号,是對(duì)狀態(tài)碼、響應(yīng)頭允瞧、響應(yīng)正文等信息進(jìn)行斷言操作简软。
在Postman中封裝了我們常見(jiàn)的斷言代碼片段,當(dāng)然Tests
除了可以作為斷言述暂,還可以當(dāng)做后置處理器痹升。
經(jīng)常應(yīng)用于:
- 斷言。
- 獲取當(dāng)前接口的響應(yīng)數(shù)據(jù)畦韭,傳遞給下一個(gè)接口疼蛾。
提示:在一個(gè)請(qǐng)求或者一個(gè)集合都可以定義
Tests
,在集合中定義Tests
艺配,表示集合中的每一個(gè)請(qǐng)求響應(yīng)后察郁,都需要執(zhí)行Tests
中的斷言腳本。
點(diǎn)擊請(qǐng)求中的Tests
標(biāo)簽項(xiàng)转唉,如下圖:
我們可以在上圖看到皮钠,在Tests
標(biāo)簽頁(yè)的右側(cè)邊欄中,Postman為我們提供了一些常用的代碼模版赠法。
提示我們:
Test scripts are written in JavaScript, and are run after the response is received.
測(cè)試腳本用JavaScript編寫(xiě)麦轰,并在收到響應(yīng)后運(yùn)行。
Learn more about tests scripts
點(diǎn)擊這里砖织,可以學(xué)習(xí)更多關(guān)于測(cè)試腳本的資料款侵。
這里學(xué)習(xí)關(guān)于
Tests
的更多用法:
https://go.pstmn.io/docs-test-scripts
總結(jié):
(1)Postman測(cè)試沙箱的執(zhí)行順序:
- 在發(fā)送Request之前,執(zhí)行
Pre-request Script
中的js腳本侧纯,可定制化Request(準(zhǔn)備數(shù)據(jù))新锈。 - 收到Response之后,執(zhí)行
Tests
中的腳本茂蚓,處理返回的數(shù)據(jù)(斷言或者處理數(shù)據(jù))壕鹉。
整個(gè)流大概是這樣的:
(2)Postman中Tests
的作用:
- 做斷言:可以斷言狀態(tài)碼或者斷言返回?cái)?shù)據(jù)中的字段。
- 取返回值:做流程接口的時(shí)候聋涨,向下傳遞返回?cái)?shù)據(jù)晾浴。
2、常用SNIPPETS(片段)說(shuō)明
(1)常用變量相關(guān)
-
Get an environment variable
:獲取一個(gè)環(huán)境變量牍白。 -
Get a gloval variable
:獲取一個(gè)全局變量脊凰。 -
Get a variable
:獲取一個(gè)變量(本地)。 -
Set an environment variable
:設(shè)置一個(gè)環(huán)境變量。 -
Set a global variable
:設(shè)置一個(gè)全局變量狸涌。 -
Clear an environment variable
:清空一個(gè)環(huán)境變量切省。 -
Clear a global variable
:清空一個(gè)全局變量 。
使用:
- 獲取變量:如果在下一個(gè)請(qǐng)求中用到上一個(gè)請(qǐng)求的返回值帕胆,可以使用“設(shè)置一個(gè)環(huán)境變量”朝捆,將請(qǐng)求的返回值設(shè)置為環(huán)境變量,在下一個(gè)請(qǐng)求中懒豹,使用“獲取一個(gè)環(huán)境變量”取到該值芙盘。
- 清空變量:這里的清空等于刪除變量,一個(gè)參數(shù)使用完成后脸秽,需要?jiǎng)h除儒老,或者清空值都可以使用該方法。
(同前一篇Pre-request Script
的使用方式一樣)
(2)狀態(tài)碼相關(guān)
-
Status code: Code is 200
:判斷狀態(tài)碼是否正確记餐;默認(rèn)判斷狀態(tài)是否為 200驮樊, 可修改。pm.test("Status code is 200", function () { pm.response.to.have.status(200); });
-
Status code:Successful POST request
:
判斷狀態(tài)碼是否為預(yù)期結(jié)果之一片酝;比如默認(rèn)斷言狀態(tài)碼是否是 201囚衔, 202 中的一個(gè)。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)響應(yīng)結(jié)果斷言:
-
Response body: Contains string
:響應(yīng)結(jié)果是否包含字符串曙聂;
注意:這只能檢查Response body中raw格式展示的返回?cái)?shù)據(jù)晦炊,如果raw格式展示的返回?cái)?shù)據(jù)中,有中文數(shù)據(jù)未解碼宁脊,也只能匹配未解碼形式的內(nèi)容断国,且匹配包含不唯一(工作中很少見(jiàn),一般接口返回?cái)?shù)據(jù)中不會(huì)設(shè)計(jì)重復(fù)字段)榆苞。
pm.test("Body matches string", function () { // 比如raw中的數(shù)據(jù)稳衬,“學(xué)院”沒(méi)有進(jìn)行Unicode解碼,就只能如下方式進(jìn)行比對(duì)坐漏。 pm.expect(pm.response.text()).to.include("例如:\u5b66\u9662"); });
-
Response body: JSON value check
:響應(yīng)結(jié)果如果是 JSON格式的數(shù)據(jù)薄疚,檢查具體的 JSON字段的值;
實(shí)際工作中基本就用這個(gè)方式赊琳。(下面有練習(xí)好好看看)
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
:響應(yīng)結(jié)果與字符串是否全部匹配預(yù)期的字符串街夭;
就是在把Response body的數(shù)據(jù)用raw格式展示,然后全部復(fù)制到下面位置躏筏。
pm.test("Body is correct", function () { pm.response.to.have.body("raw格式展示的返回?cái)?shù)據(jù)板丽,全部復(fù)制到這里"); });
-
Response body: Convert XML body to a JSON Object
:
將 XML 轉(zhuǎn)換成 JSON;var jsonObject = xml2Json(responseBody);
等等還有很多趁尼,用的時(shí)候我們可以查看相關(guān)文檔埃碱。
(4)Header :
Response headers:Content-Type header check
響應(yīng)頭部中是否包含字段猖辫,代碼片段如下:
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type(這里填寫(xiě)請(qǐng)求頭屬性)");
});
(5)響應(yīng)速度:
Response time is less than 200ms
響應(yīng)時(shí)間是否少于多少 ms。
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});