Jmeter常用断言实战详解
斷言:依靠軟件程序自動判斷操作結(jié)果的正確性,用于檢查測試中得到的響應(yīng)數(shù)據(jù)等是否符合預(yù)期。在接口測試用例中沒有斷言的接口用例是無效的,一個接口的斷言有三個層面,一個是HTTP狀態(tài)碼的斷言,另外一個是業(yè)務(wù)狀態(tài)碼的斷言,最后是某一接口請求后服務(wù)端響應(yīng)數(shù)據(jù)的斷言
Jmeter最常用斷言:Response Assertion(響應(yīng)斷言),Json斷言,beanshell斷言
一:Response Assertion(響應(yīng)斷言)
響應(yīng)斷言:可選擇斷言驗證的范圍(URL,響應(yīng)頭,響應(yīng)碼,響應(yīng)體,響應(yīng)附件),匹配的模式(純文本還是正則表達式匹配)
操作響應(yīng)斷言:添加-斷言-響應(yīng)斷言
對web請求http狀態(tài)碼的斷言
1.對http請求狀態(tài)碼的驗證
Apply to (響應(yīng)斷言的應(yīng)用范圍)
Main sample and sub-samples:作用于父節(jié)點取樣器及對應(yīng)子節(jié)點取樣器
Main sample only:只作用于父節(jié)點取樣器(一般的斷言都選這個)
Sub-samples only:只作用于子節(jié)點取樣器
JMeter Variable:只作用于jmeter變量(可寫入正則提取的響應(yīng)值)
測試字段:
響應(yīng)文本:請求的響應(yīng)文本信息,不包含響應(yīng)頭信息。最常用的斷言字段
響應(yīng)代碼:對應(yīng)http返回的響應(yīng)碼
響應(yīng)信息:匹配響應(yīng)信息
響應(yīng)頭:響應(yīng)頭信息
URL樣本: 請求url,如果有重定向包含重定向url
文檔(文本):通過Apache Tika從各種的文檔中提取的文本進行驗證,包括響應(yīng)文本,pdf、word等等各種格式
忽略狀態(tài)(Ignore Status): 一個請求多項響應(yīng)斷言時,忽略某一項斷言的響應(yīng)結(jié)果,而繼續(xù)下一項斷言
模式匹配規(guī)則
包括:響應(yīng)的結(jié)果中包含指定的文本或者字段值,支持正則表達式
匹配:完全匹配,期望值與實際結(jié)果必須完全一致,一般結(jié)合正則表達式使用
相等:響應(yīng)結(jié)果與指定的內(nèi)容完全一致,不支持正則表達式
字符串:返回結(jié)果,包含指定的字符串,不支持正則表達式
否:不進行匹配
2.添加斷言結(jié)果,添加-監(jiān)聽器-斷言結(jié)果
3.發(fā)送請求,查看斷言結(jié)果
查看此請求實際響應(yīng)結(jié)果十分與斷言一致
可看到此請求實際響應(yīng)結(jié)果的status是404,與我們斷言200不一致,故fail
可對其它響應(yīng)文本進行斷言,與此類似
二:Json斷言
JSON斷言可以對服務(wù)器返回的JSON文檔進行驗證。
JSON斷言有兩種使用模式:
1.根據(jù)JSONPath能否在JSON文檔中找到路徑;
2.根據(jù)JSONPath提取值并對值進行驗證。
若文檔格式為非JSON則斷言失敗;找不到路徑斷言失敗;提取值與預(yù)期值不一致斷言失敗。
1.添加-斷言-Json斷言
2.若響應(yīng)數(shù)據(jù)返回是Json格式,我們可以對其進行json斷言操作,在請求的察看結(jié)構(gòu)樹響應(yīng)數(shù)據(jù)里提取數(shù)值對其進行斷言,示例提取data里的phone進行斷言如下
配置項
Assert JSON Path exists:
用于斷言的JSON元素的路徑(JSONPath)。
1.Additionally assert value
是否額外驗證根據(jù)JSONPath提取的值。
不勾選,驗證JSONPath能否在JSON文檔中找到路徑;
勾選,驗證根據(jù)JSONPath提取值是否預(yù)期。
2.Match as regular expression
預(yù)期值是否可以使用正則表達式。
不勾選,預(yù)期值不能使用正則表達式表示;
勾選,預(yù)期值可以使用正則表達式表示。
Expected Value:
預(yù)期值。
1.Expect null
若驗證提取的值為null,則勾選此項。
這里有兩個地方需要額外注意:
a.驗證null值,還是需要勾選“Additionally assert value”,否則驗證的是JSONPath能否找到路徑;
b.預(yù)期值不填表示空字符,與null不等價。
2.Invert assertion(will fail if above conditions met)
若勾選,表示對斷言結(jié)果取反。
注:除了null外,還有一種特殊的值,就是空數(shù)組,預(yù)期值不能不填,需要設(shè)置為:[],表示空數(shù)組。
3.查看斷言結(jié)果
可看到實際響應(yīng)結(jié)果與預(yù)期不一致,故fail
三:Beanshell斷言
BeanShell斷言可以使用beanshell腳本來執(zhí)行斷言檢查,可以用于更復(fù)雜的個性化需求,使用更靈活,功能更強大,但是要能夠熟練使用beanshell腳本
在這里除了可以使用beanshell的內(nèi)置變量外,主要通過 Failure 和 FailureMessage來設(shè)置斷言結(jié)果
1.添加-斷言-Beanshell斷言
2.對http響應(yīng)碼斷言實戰(zhàn)
3.查看斷言結(jié)果
可知響應(yīng)結(jié)果不是200而是404
JMeter在它的BeanShell中內(nèi)置了變量,用戶可以通過這些變量與JMeter進行交互,其中主要的變量及其使用方法如下:
log:寫入信息到j(luò)meber.log文件,使用方法:log.info(“This is log info!”);
ctx:該變量引用了當(dāng)前線程的上下文,使用方法可參考:org.apache.jmeter.threads.JMeterContext。
vars - (JMeterVariables):操作jmeter變量,這個變量實際引用了JMeter線程中的局部變量容器(本質(zhì)上是Map),它是測試用例與BeanShell交互的橋梁,常用方法:
a) vars.get(String key):從jmeter中獲得變量值
b) vars.put(String key,String value):數(shù)據(jù)存到j(luò)meter變量中
更多方法可參考:org.apache.jmeter.threads.JMeterVariables
props - (JMeterProperties - class java.util.Properties):操作jmeter屬性,該變量引用了JMeter的配置信息,可以獲取Jmeter的屬性,它的使用方法與vars類似,但是只能put進去String類型的值,而不能是一個對象。對應(yīng)于java.util.Properties。
a) props.get(“START.HMS”); 注:START.HMS為屬性名,在文件jmeter.properties中定義
b) props.put(“PROP1”,“1234”);
prev - (SampleResult):獲取前面的sample返回的信息,常用方法:
a) getResponseDataAsString():獲取響應(yīng)信息
b) getResponseCode() :獲取響應(yīng)code
更多方法可參考:org.apache.jmeter.samplers.SampleResult
sampler - (Sampler):gives access to the current sampler
總結(jié)
以上是生活随笔為你收集整理的Jmeter常用断言实战详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大疆文档(3)-开发流程
- 下一篇: vim替换和查找