1.什麼是BeanShell斷言?
BeanShell斷言可以使用beanshell腳本來執行斷言檢查,可以用于更複雜的個性化需求,使用更靈活,功能更強大,但是要能夠熟練使用beanshell腳本。
在這裡除了可以使用beanshell的内置變量外,主要通過Failure和FailureMessage來設定斷言結果。
Failure = false;-----表示斷言成功,
FailureMessage = "……"; ----自定義的成功資訊
Failure = true;-----表示斷言失敗,
FailureMessage = "……";-----自定義的失敗資訊。
org.json.jar下載下傳位址
連結: https://pan.baidu.com/s/1bIwY5N81JVx_Z_aM0UP76A 提取碼: 6jcz
BeanShell斷言界面如下:

Name:斷言的名字(可以用一個比較容易了解和分辨的名稱)
Comments:注釋(對這個斷言進行一個解釋,備注)
Reset bsh.interpreter before each call:在每次調用Bean Shell之前重置bsh.interpreter類(bsh.interpreter是Bean Shell腳本語言的一種類,也可以了解為一種解析器)
Parameters(String Parameters and String []bsh.args):String參數(String []bsh.args是主類main函數的形式參數,是一個String 對象數組,可以用來擷取指令行使用者輸入進去的參數)
Script file:腳本檔案(可以填入腳本檔案路徑)
Script(see below for variables that are defined):參照下文定義的變量(使腳本檔案參照定義的變量來運作)
2.示例
添加斷言-BeanShell斷言
添加監聽器-斷言結果
import org.json.*;
//擷取上一個請求的傳回值
String response = prev.getResponseDataAsString();
//将傳回值轉換為json
JSONObject responseJson = new JSONObject(response);
//擷取響應中的responseMessage
String message = responseJson.getString("message");
log.info("message的值:" + message);
//獲得内置變量$recnum的值
String recnum = vars.get("recnum");
if (recnum.equals("310000026") || recnum.equals("310000028")) {
if (message.equals("同一學員教育訓練時段已存在")) {
Failure = false;
} else {
Failure = true;//失敗
FailureMessage = "message:" + message;//失敗原因
}
} else {
if ("".equals(message)) {
Failure = false;
} else {
Failure = true;//失敗
FailureMessage = "message:" + message;//失敗原因
}
}
log.info("recnum:" + recnum+"*Failure"+Failure);
斷言結果
3.常用内置變量
JMeter在它的BeanShell中内置了變量,使用者可以通過這些變量與JMeter進行互動,其中主要的變量及其使用方法如下:
log:用來記錄日志檔案,寫入到jmeber.log檔案,使用方法:log.info(“This is log info!”);
ctx(JmeterContext)通過它來通路context,使用方法可參考:org.apache.jmeter.threads.JMeterContext。
vars - (JMeterVariables):操作jmeter變量,提供讀取/寫入通路變量的方法。這個變量實際引用了JMeter線程中的局部變量容器(本質上是Map),它是測試用例與BeanShell互動的橋梁,常用方法:
a) vars.get(String key):從jmeter中獲得變量值
b) vars.put(String key,String value):資料存到jmeter變量中
c) vars.putObject("OBJ1",new Object());
更多方法可參考:org.apache.jmeter.threads.JMeterVariables
props - (JMeterProperties - class Java.util.Properties):操作jmeter屬性,該變量引用了JMeter的配置資訊,可以擷取Jmeter的屬性,它的使用方法與vars類似,但是隻能put進去String類型的值,而不能是一個對象。對應于java.util.Properties。
a) props.get("START.HMS"); 注:START.HMS為屬性名,在檔案jmeter.properties中定義
b) props.put("PROP1","1234");
prev - (SampleResult):擷取前面的sample采樣的結果,常用方法:
a) getResponseDataAsString():擷取響應資訊
b) getResponseCode() :擷取響應code
更多方法可參考:org.apache.jmeter.samplers.SampleResult