Jmeter- Beanshell語法和常用內置對象


      在利用jmeter進行接口測試或者性能測試的時候,我們需要處理一些復雜的請求,此時就需要利用beanshell腳本了,BeanShell是一種完全符合Java語法規范的腳本語言,並且又擁有自己的一些語法和方法,所以它和java是可以無縫銜接的。beanshell由於內置了一些特有的變量,沒法在一些集成代碼工具上去調試。今天就和大家分享下常用的2個代碼例子,大家可以直接拿來稍微修改下就可以使用。

Bean Shell內置變量大全

     首先大家需要掌握bean shell本身自帶的一些內置變量和一些方法。JMeter在其BeanShell中內置了變量,用戶是通過這些變量與JMeter進行交互。

1.log 打印日志,寫入信息到jmeber.log文件。
2.SampleResult 獲取SampleResult對象,能通過這個對象獲取想要的信息。
3.Response 獲取Response對象,能通過這個對象獲取響應信息。
4.Failure 查看接口調使用能否成功,假如返回false是成功的,true是失敗的。
5.FailureMessage 失敗信息,沒有設置的時候失敗信息是空的,能set這個信息。
6.ResponseData 獲取response body類型是byte[]。
7.ResponseCode 返回接口code成功是200。
8.ResponseMessage 獲取msg成功是OK。
9.ResponseHeaders 獲取接口服務端返回的頭部信息。
10.RequestHeaders 獲取用戶端請求的頭部信息。
11.SampleLabel 獲取接口請求的名稱。
12.SamplerData 獲取請求的url和body。
13.ctx 代表上下文信息,能直接用。
14.vars即JMeterVariables,操作jmeter變量,這個變量實際引用了JMeter線程中的局部變量容器(本質上是Map),常用方法:
  a) vars.get(String key):從jmeter中獲得變量值;
  b) vars.put(String key,String value):數據存到jmeter變量中;
15.prev 獲取前面的sample返回的信息,常用方法:
  a) getResponseDataAsString():獲取響應信息。
  b) getResponseCode() :獲取響應code。

 


1:Beanshell的基本語法
1.1:Beanshell的For循環與集合

String a = "aaa";
int b = 111;

List list  = new ArrayList();
//list集合只能保存String類型
list.add(a);
list.add(b.toString());
//普通for循環的寫法
for(int i = 0; i<list.size();i++){
log.info(">>>>>>>>>>>");
log.info(list.get(i));
}
//增強for循環的寫法
for(object : list){
log.info("==========");
log.info(object);
}

 

1.2:Beanshell的數組的寫法

String[] str1 = new String[]{"aa","bb","cc"};//new一個String[]一維數組

String[][] str2 = new String[][]{{"AA","BB"},{"CC","DD"},{"EE","FF"}};
//遍歷str1這個一維數組
for(int i = 0; i< str1.length ; i++){
log.info(str1[i]);
}
//遍歷第二個二維數組
for (String[] strings : str2) {

for(int i = 0; i< strings.length ; i++){

log.info(strings[i]);
}
}

 

1.3:Beanshell定義一個函數 並調用

//定義一個方法
public void addlist(List list){

list.add("aaa");
list.add("bbb");
list.add("ccc");
}

List list = new ArrayList();
//調用方法
addlist(list);
//遍歷list集合
for(int i = 0; i < list.size(); i++){
log.info(list.get(i));
}

 

2:Beanshell常用的內置對象
2.1:bsh.args對象獲取數組參數

2.2:vars內置對象的使用
A:示例定義一個用戶自定義變量

 

B:vars.get(String key)獲取String變量 

   vars.put(String key,Value)放置一個Map到vars 

   

2.3:vars內置對象put和get Object對象
如果需要獲取或者放置非String類型數據 需要用putObject()和getObject()

//Beanshell vars.putObject() vars.getObject()的使用
List list = new ArrayList();

list.add("aaa");
list.add("bbb");
//putObject()可以在vars對象中放置Object類型對象
vars.putObject("list",list);
//===========================
//獲取Object list對象
Object Value = vars.getObject("list");
//log.info只能輸出String類型變量
log.info(Value.toString());

 3:Beanshell的常用內置對象-ctx
3.1:ctx內置對象getPreviousResult()方法 調用請求/響應數據

ctx內置對象來自於JMeterContext 查看Jmeter API發現有下列get方法可以獲取請求/響應數據

//SampleResult需要import對象
import org.apache.jmeter.samplers.SampleResult;

SampleResult result = ctx.getPreviousResult();
//getRequestHeaders()方法返回String字符串
String RequestHeaders = result.getRequestHeaders();
//getResponseHeaders() 返回響應headers
String ResponseHeaders = result.getResponseHeaders(); 
//getResponseCode() 返回響應狀態碼字符串
String responseCode = result.getResponseCode();
//getURL() 返回請求URL對象 
URL url = result.getURL();
log.info(RequestHeaders);
log.info(RequestHeaders);

4:prev內置對象
prev是Beanshell后置處理器的內置對象 相當於ctx.getPreviousResult();

5.  高級用法:假如我們希望線程之間共享一個變量,可以利用BeanShell來完成。

    JMeter中線程間共享變量可以通過定義屬性值來完成,JMeter啟動時會讀取一些屬性文件,比如jmeter.properties、user.properties,這些屬性值是可以修改的,通過BeanShell可以對其進行更改。通過props.put()來修改屬性,props.get()來獲取屬性。

6. jmeter中,BeanShell的使用由以下場景:

前置處理器:BeanShell PreProcessor
取樣器 :BeanShell Sampler
后置處理器:BeanShell PostProcessor

Jmeter中包括多種BeanShell,用法差不多,只是作用的地方不同。
定時器:  BeanShell Timer
前置處理器:BeanShell PreProcessor,提前處理請求參數,如:加密解密等
采樣器:  BeanShell Sampler
后置處理器:BeanShell PostProcessor,在請求后對返回結果進行處理
斷言:   BeanShell斷言,驗證返回結果的正確性
監聽器:  BeanShell Listener

 

摘錄:https://blog.csdn.net/hujyhfwfh2/article/details/80862134

         https://blog.51cto.com/14010723/2298911


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM