BeanShell斷言可以使用beanshell腳本來(lái)執(zhí)行斷言檢查,可以用于更復(fù)雜的個(gè)性化需求,使用更靈活,功能更強(qiáng)大,但是要能夠熟練使用beanshell腳本
在這里除了可以使用beanshell的內(nèi)置變量外,主要通過(guò) Failure 和 FailureMessage來(lái)設(shè)置斷言結(jié)果。
Failure = false;-----表示斷言成功
FailureMessage = “......";---自定義的成功信息
Failure = true;----表示斷言失敗
FailureMessage="......";------自定義的失敗信息
一、添加斷言方式
根據(jù)需要可在【測(cè)試計(jì)劃】、【線程組】、【線程請(qǐng)求】下添加斷言,一般在對(duì)應(yīng)的【線程請(qǐng)求】下添加,如下圖所示,即本文所介紹的。
添加路徑:【線程請(qǐng)求-點(diǎn)擊右鍵-添加-斷言-最后一個(gè)BeanShell斷言】
二、BeanShell斷言
響應(yīng)斷言界面設(shè)置,如下圖:
2.1.BeanShell斷言界面詳解
【名稱】BeanShell斷言組件的自定義名稱,見(jiàn)名知意最好。
【注釋】即添加一些備注信息,對(duì)該BeanShell斷言組件的簡(jiǎn)短說(shuō)明,以便后期回顧時(shí)查看。
【Reset bsh.Interpreter before each call】每個(gè)BeanShell測(cè)試元素都有自己的解釋器副本(對(duì)于每個(gè)線程)。
如果重復(fù)調(diào)用測(cè)試元素,例如:在循環(huán)內(nèi),除非選擇在每次調(diào)用之前重置bsh.Interpreter選項(xiàng),否則解釋器將保留在調(diào)用之間。一些長(zhǎng)時(shí)間運(yùn)行的測(cè)試可能會(huì)導(dǎo)致解釋器使用大量?jī)?nèi)存。
由于BeanShell的bsh.Interpreter存在內(nèi)存泄露,常規(guī)方法無(wú)法支持長(zhǎng)時(shí)間的壓力測(cè)試。
JMeter官網(wǎng)推薦,在使用BeanShell進(jìn)行長(zhǎng)時(shí)間測(cè)試時(shí),**打開(kāi)選項(xiàng)【每次調(diào)用前置 bsh.Interpreter】=【Reset bsh.Interpreter before each call】,則在每次調(diào)用BeanShell程序前,都把解釋器重置,以釋放解釋器之前占用的內(nèi)存。
【參數(shù) (-> String Parameters和String[]bsh.args)】輸入String參數(shù)。String[]bsh.args是主類main函數(shù)的形式參數(shù),是一個(gè)String 對(duì)象數(shù)組,可以用來(lái)獲取命令行用戶輸入進(jìn)去的參數(shù)。
【腳本文件】腳本文件(可以填入腳本文件路徑),可以點(diǎn)擊后邊的瀏覽選擇腳本文件。
【腳本】:編寫腳本,參照下文定義的變量(使腳本文件參照定義的變量來(lái)運(yùn)行)
2.2.斷言源碼
狀態(tài)碼斷言-源碼信息,如下:
//狀態(tài)碼斷言
log.info("狀態(tài)碼:" + ResponseCode);
if(ResponseCode.equals("200")){
Failure=false; // 表示斷言成功
}
else{
Failure=true; // 表示斷言失敗
FailureMessage="響應(yīng)狀態(tài)碼非200"; // 自定義的失敗信息
}
注:字符串只能使用雙引號(hào),字符串相等要使用" “.equals(” ")表達(dá)式。
響應(yīng)數(shù)據(jù)斷言-源碼信息,如下:
//獲取響應(yīng)數(shù)據(jù)
String response = prev.getResponseDataAsString();
log.info("響應(yīng)體:" + response);
//響應(yīng)數(shù)據(jù)包含
if(response.contains("token")){
Failure=false; // 表示斷言成功
}
else{
Failure=true; // 表示斷言失敗
FailureMessage="響應(yīng)數(shù)據(jù)不包含token";
}
三、斷言結(jié)果查看
3.1.【斷言結(jié)果】組件
添加路徑:【測(cè)試計(jì)劃-點(diǎn)擊右鍵-添加-監(jiān)聽(tīng)器-斷言結(jié)果】
整個(gè)測(cè)試計(jì)劃下所有請(qǐng)求的所有斷言結(jié)果報(bào)錯(cuò)信息均會(huì)在此顯示,如下圖所示,將所有斷言結(jié)果的報(bào)錯(cuò)信息直接展示出來(lái)。
3.2.【察看結(jié)果樹(shù)】組件
添加路徑:【測(cè)試計(jì)劃-點(diǎn)擊右鍵-添加-監(jiān)聽(tīng)器-查看結(jié)果樹(shù)】,整個(gè)測(cè)試計(jì)劃下所有請(qǐng)求的所有斷言結(jié)果報(bào)錯(cuò)信息均會(huì)在此顯示,如下圖的形式,切換查看。
四、實(shí)例演示
已知請(qǐng)求的接口,響應(yīng)狀態(tài)碼:200,響應(yīng)結(jié)果包含:token字段,如下圖,按照【2.2.斷言源碼】設(shè)置腳本,斷言成功通過(guò)
修改斷言腳本如下圖所示:
查看斷言結(jié)果:2個(gè)斷言均不通過(guò),如下圖所示
1、【察看結(jié)果樹(shù)】組件,查看斷言結(jié)果
2、【斷言結(jié)果】組件,查看斷言結(jié)果
五、BeanShell簡(jiǎn)介
Beanshell是一種類似JAVA的腳本語(yǔ)言,通過(guò)BeanShell可以對(duì)請(qǐng)求數(shù)據(jù)、響應(yīng)數(shù)據(jù)或環(huán)境變量進(jìn)行更加靈活的處理和判斷。還可以直接調(diào)用外部的JAR包,例如:可以直接引入現(xiàn)成的第三方JSON解析包來(lái)使用。
在JMeter的多種組件中都有BeanShell的身影,如下:
定時(shí)器:BeanShell Timer
前置處理器:BeanShell PreProcessor
采樣器:BeanShell Sampler
后置處理器:BeanShell PostProcessor
斷言:BeanShell Assert
監(jiān)聽(tīng)器:BeanShell Listener
在JMeter運(yùn)行的流程控制中,BeanShell出現(xiàn)的位置,如下圖所示:
Beanshell的內(nèi)置變量和方法
Beanshell有一些默認(rèn)的內(nèi)置變量和方法,用戶可以通過(guò)這些變量與JMeter進(jìn)行交互,例如:
1、prInt:非GUI模式下打印信息(輸出信息到stdout,標(biāo)準(zhǔn)輸出控制臺(tái))。
2、log:輸出信息到日志(文件)
- log.debu(“調(diào)試信息”)
- log.info(“響應(yīng)狀態(tài)碼” + ResponseCode)
- log.warn(“警告信息”)
log.error(“出錯(cuò)信息”)
3、ResponseCode:響應(yīng)狀態(tài)碼(String類型)。
4、ResponseHeaders:響應(yīng)頭(String類型)。
5、prev:獲取當(dāng)前請(qǐng)求結(jié)果
- prew.getResponseDataAsString():獲取響應(yīng)體數(shù)據(jù)(String類型)。
- prew.getResponseCode():獲取狀態(tài)碼(同ResponseCode,String類型)。
6、vars:操作JMeter變量
- String var1 = vars.get(“變量名”):獲取變量的值(假設(shè)為String類型)。
- vars.put(“變量名”, 變量值):設(shè)置變量值。
7、props:操作JMeter屬性文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-784076.html
- props.get(String,String) 可以獲取JMeter中已經(jīng)生成的屬性。
- props.put(String,String)可以創(chuàng)建和更新JMeter屬性。
8、ctx:獲取當(dāng)前線程上下文數(shù)據(jù)(可獲取所有信息)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-784076.html
- ctx.getVariables(“變量名”):獲取變量值(同vars.get())
- ctx.setVariables(“變量名”,“變量值”):設(shè)置變量(同vars.put())
- ctx.getProperties(“屬性名”):獲取屬性值(同props.get())。
- ctx.setProperties(“屬性名”,“屬性值”):設(shè)置屬性(同props.put()
- ctx.getPreviousResult():獲取當(dāng)前請(qǐng)求結(jié)果同(prev)
- ctx.getCurrentSampler():獲取當(dāng)前采樣器。
- ctx.getPreviousSampler():獲取前一采樣器。
- ctx.getThreadNum():獲取線程數(shù)。
- ctx.getThreadGroup():獲取線程組。
- ctx. getThread():獲取當(dāng)前線程。
- ctx.getEngine():獲取引擎。
- ctx.isSamplingStarted():判斷采樣器是否啟動(dòng)。
- ctx.isRecording():判斷是否開(kāi)啟錄制。
- ctx.getSamplerContext():獲取采樣器山下文數(shù)據(jù)。
到了這里,關(guān)于Jmeter常用斷言之BeanShell斷言詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!