介面測試27--Postman-Tests斷言
阿新 • • 發佈:2021-10-28
測試斷言Tests
在Tests中如果沒有斷言,則測試結果(Test Results)會顯示沒有測試
用於處理響應結果(響應頭、響應體/響應正文)、進行斷言(判斷介面的返回結果是否符合預期)
除錯指令碼的相關程式碼
a)console.log(資料); 向控制檯輸出資料 console:控制檯(用於顯示日誌的一個視窗) log:日誌 b)var 變數名=資料; 定義一個變數(記憶體中的一個位置,裡面儲存了=號右邊的資料),變數可以在後面反覆使用(不用重複去寫複雜的資料) var:variable,變數 c)typeof 資料或變數 檢視資料或變數中儲存的資料的型別,以決定後面如何處理資料 type:型別 of:的,誰的
響應斷言
(1) 就是比對測試結果是否正確
(2) 方法
① 選單操作/模板
② 程式碼
獲得響應
狀態碼
responseCode.code:固定寫法,必須嚴格按大小寫用
response:響應,表示伺服器發來的資料
code:程式碼
比如200、301、302、403、404、500等都是響應狀態碼
檢視響應狀態碼:var ztm=responseCode.code;
響應正文
responseBody:固定寫法,必須嚴格按大小寫用 body:正文,主體 注意:不論是響應型別是html格式(網頁<html>、<table>)、json格式({ })、xml格式,還可以是別的型別,一般響應正文都被改變成了字串型別
對響應結果的處理
a)text/html格式(純字串或者html網頁程式碼格式) 有很多處理方式,比如split是其中之一 字串.split("分割符"):表示對字串按照分隔符拆成多個字串 b)json格式 注意:響應正文字身是字串,即便響應型別是json格式,結果也是字串,所以必須將字串轉成json字典型別 JSON.parse(responseBody):把響應正文轉成json字典(注意響應正文必須是帶{ }格式的才可以轉) parse:轉換型別 { "a":"zhsan", "b":{ "c":20 } } 看a的值: JSON.parse(responseBody).a JSON.parse(resposneBody)["a"] 引號不能省略,單引號也可以 看c的值: JSON.parse(responseBody).b.c JSON.parse(resposneBody)["b"]["c"] 引號不能省略,單引號也可以
斷言程式碼寫法
tests['斷言訊息']=responseBody.has('預期文字')
① tests是關鍵字
② has表示包含、有
③ 如果包含預期文字,則測試結果為Pass,否則結果為Fail
測試login介面(需求檢視exam專案需求)
介面需求:
地址:http://IP/exam/login/
方法:post
引數:username、password
資料庫表:exam.user
返回值:text/html
預期包含文字(假設測試登入成功的情況):登入驗證成功
新增測試資料:
使用者名稱 test01,密碼 123456
insert into exam.user values(2,'test01','123456');
測試signup介面(需求檢視exam專案需求)
介面需求:
地址:http://IP/exam/signup/
方法:post
引數:username、password、confirm、name
資料庫表:exam.user
返回值:json
預期包含文字(假設測試成功註冊):Success
注意刪除資料:
delete from exam.user where id>1;
tests['斷言訊息']=實際結果===預期結果
① === 表示相等
② = 表示賦值
③ 對比
1) has斷言是一種模糊匹配,部分資料正確即可,has一般用於text/html型別的斷言
2) ===是一種精確匹配,資料必須完全一致,一般用於json斷言
測試登入介面(需求檢視exam專案需求)
介面需求:
地址:http://IP/exam/login/
方法:post
引數:username、password
資料庫表:exam.user
返回值:text/html
預期包含文字(假設測試登入成功的情況):登入驗證成功
新增測試資料:
使用者名稱 test01,密碼 123456
insert into exam.user values(2,'test01','123456');
要求使用===對登入介面進行斷言
測試signup介面(需求檢視exam專案需求)
介面需求:
地址:http://IP/exam/signup/
方法:post
引數:username、password、confirm、name
資料庫表:exam.user
返回值:json
預期包含文字(假設測試成功註冊):Success
注意刪除資料:
delete from exam.user where id>1;
要求使用===對註冊介面進行斷言
響應斷言型別
has斷言
響應正文:相當於實際結果
has斷言是判斷實際結果中包含預期結果(字串)
json斷言
支援has斷言(當對實際結果中的漢字斷言時,較難)
使用===對json進行部分斷言、整體斷言
1)將響應正文()轉為json字串格式
actual =JSON.parse(responseBody)//將實際結果轉換為json字典形式
2)JSON部分資料斷言
actual['鍵名']或actual.鍵名可以獲得實際結果中的某個鍵的值,對於漢字,正常顯示
巢狀json:actual['鍵名1']['鍵名2']
3)json整體斷言
對json字串進行格式化(統一格式)
postman中不支援json字串1===json字串2
json字串格式化方式:JSON.stringify(json字串)
鍵、字串資料、日期等全都加雙引號定界,數值資料不變
鍵與值之間的空格、鍵值對之間的空格會被自動刪除
測試重複註冊,新增JSON部分斷言
介面需求:
地址:http://介面伺服器IP地址/exam/signup/
方法:post
引數:username、password、confirm、name
預期:{'Status':1003, 'Result':'Username is taken', 'Message':'使用者名稱已被佔用'}
注意:資料庫中準備資料
insert into exam.user(id,username,password,name) values(2,'test01','123456','測試01');
測試使用者重複註冊時,驗證返回的JSON字串整體是否正確
介面需求:
地址:http://介面伺服器IP地址/exam/signup/
方法:post
引數:username、password、confirm、name
預期:{'Status':1003, 'Result':'Username is taken', 'Message':'使用者名稱已被佔用'}
注意:資料庫中準備資料
insert into exam.user(id,username,password,name) values(2,'test01','123456','測試01');