測試斷言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(id,username,password) 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
要求使用===對登錄接口進行斷言
測試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');