轉載自:https://www.cnblogs.com/Jmeter-Automation/p/12730673.html
在使用JMeter進行性能測試或者接口自動化測試工作中,經常會用到的一個功能,就是斷言,斷言相當於檢查點,它是用來判斷系統返回的響應結果是否正確,以此幫我們判斷測試是否通過
本文 主要介紹幾種常用的斷言:響應斷言、JSON斷言、BeanShell 斷言
一、響應斷言
1. 響應斷言是最常用的一種斷言方法,它可以對各種返回類型的結果進行斷言,比如Test、html、application/json等
2. 在需要進行斷言的Sample,點擊右鍵》添加》斷言》響應斷言
3. Apply to選項默認即可,Main sample only(僅作用於父節點取樣器)
4. 測試字段常用的有響應文本(對響應結果進行斷言)、響應頭(對響應頭文件進行斷言)
5. 模式匹配規則常用有包括(響應結果包括斷言的內容),相等(響應結果和斷言結果相同)
6. 測試模式可以添加你需要斷言的部分,如果是包括,就可以添加多個
7. 執行測試,斷言通過則顯示綠色
8. 把斷言改成響應結果不存在的字段,執行結果,顯示紅色,斷言結果顯示系統響應結果不包含“測試斷言”字段
二、JSON斷言
1. JSON斷言也是測試工作中經常用到的一種斷言方法,它只能針對響應結果是applicaton/json格式的請求進行斷言
2. 在需要進行斷言的Sample,點擊右鍵》添加》斷言》JSON斷言
3. 我們使用json斷言,一般是斷言某個字段值是否返回的是我們需要的,所以需要寫JSON PATH(不會寫的看本人另外一篇文章有介紹如何寫),下圖使用正則模式匹配返回的結果包含40就認為響應結果滿足要求,斷言配置和響應結果如下所示:
4. 下面展示斷言結果為常量時,如何進行斷言設置,如下圖所示
三、BeanShell斷言
1. BeanShell斷言支持各種開發語言,本文介紹使用java編寫斷言,使用BeanShell斷言的好處是可以自由發揮,比如當斷言失敗,提示預期結果、實際結果,或者失敗時把結果輸出到日志
2. 在需要進行斷言的Sample,點擊右鍵》添加》斷言》BeanShell斷言
3. 如果使用包含匹配,只需要修改預期結果即可,預期結果需要寫在雙引號之間,中間的雙引號需要添加\轉義,如下:
String response = ""; String Str = "{\"errNo\":\"403\""; //預期結果,需要校驗的字段 response = prev.getResponseDataAsString(); //獲取當前請求響應結果 if(response == ""){ Failure = true; FailureMessage = "系統無響應,獲取不到響應數據!"; //對比數據庫內容和響應內容,私用euqals方法判斷是否一致 } else if(response.contains(Str) == false){ //把斷言失敗置為真 Failure = true; String Msg = "\n系統返回響應結果與期望結果不一致!請排查是性能問題,還是程序代碼問題"; FailureMessage = Msg + "\n" + "期望結果:\n" + Str + "\n" + "響應內容: \n" + response +"\n"; }
4. 使用完全相等匹配,並且失敗時,輸出結果到日志,本次把預期結果改錯,所以會輸出響應結果到錯誤日志,代碼如下:
String response = ""; String Str = "{\"errNo\":\"401\""; //預期結果,需要校驗的字段 response = prev.getResponseDataAsString(); //獲取當前請求響應結果 if(response == ""){ Failure = true; FailureMessage = "系統無響應,獲取不到響應數據!"; log.info(FailureMessage); //對比數據庫內容和響應內容,私用euqals方法判斷是否一致 } else if(response.equals(Str) == false){ //把斷言失敗置為真 Failure = true; String Msg = "\n系統返回響應結果與期望結果不一致!請排查是性能問題,還是程序代碼問題"; FailureMessage = Msg + "\n" + "期望結果:\n" + Str + "\n" + "響應內容: \n" + response +"\n"; log.info(FailureMessage); }