JMeter中BeanShell的使用方法和常用語法

一、什麼是BeanShell

BeanShell是由java編寫的,是一個輕量級的腳本語言,也相當於一個小巧免費的JAVA源碼解釋器,支持對象式的腳本語言特性,亦可嵌入到JAVA源代碼中,能動態執行JAVA源代碼併爲其擴展了腳本語言的一些特性。

二、JMeter中用BeanShell的好處

JMeter也是由java編寫的,而java運行時需要先編譯,然後纔可以運行,而BeanShell是一款解釋器,直接可能運行源代碼;

三、BeanShell在JMeter的作用

(1)對JMeter的功能的擴展;

(2)對jmeter變量的一些操作;

四、JMeter中BeanShell常用的基本語法:

   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),常用方法:

     (1) vars.get("String key"):從jmeter中獲得變量值;

     (2) vars.put("String key","String value"):將數據存到jmeter變量中;

  15、prev 獲取sample返回的信息,常用方法:

     (1) getResponseDataAsString():獲取響應信息。

    (2) getResponseCode() :獲取響應code。

五、Jmeter中包含的BeanShell類型
    1、BeanShell前置處理器:BeanSell PreProcessor
    2、BeanShell取樣器:BeanSell Sampler
    3、BeanShell後置處理器:BeanSell PostProcessor
    4、BeanShell監聽器:BeanSell Listener
    5、BeanShell定時器:BeanSell Timer
    6、BeanShell斷言:BeanSell斷言

BeanShell前置處理器、BeanShell取樣器、BeanShell後置處理器,它們之間的區別

   1、BeanShell前置處理器、BeanShell後置處理器 比 BeanShell取樣器多一個重置解釋器(Reset Interpreter),意思是指:對於每一次處理是不是都要進行重置;

  2、在JMeter中BeanShell取樣器是當成線程處理的,所以運行時是有一定的消耗的,而使用BeanShell前置處理器、BeanShell後置處理器總體來說比BeanShell取樣器消耗低,相當於少起一個線程。

六、JMeter中BeanShell使用

1、BeanSell取樣器中直接編寫代碼

(1)提取下圖中的https的鏈接地址

(2)首先用正則表達式提取器來提取值,這邊的正則表達式可以只提取一個值,也就是隻寫了一個()

(3)在BeanShell取樣器輸入輸入源碼,注意:這邊一定要寫參數${ABCDEF},這個值依賴於正則表達式提取數據,並且在代碼中一定要寫str = bsh.args[0],表示獲取數組參數,如果是取變量,用vars.get("String key")

public static void link(){
	String IP;
	String path;
	String str;
	str = bsh.args[0];
	IP = str.substring(0,str.indexOf("/"));
	path = str.substring(str.indexOf("/")+1);
	vars.put("IP",IP);
	vars.put("path",path);		
}
link();

(4)Http2請求中服務器與路徑的數據依賴於BeanShell取樣器中所獲取的IP、path的值

(5)運行後,在察看結果樹中,可以看到獲取到了IP與path的值

(6)察看結果樹中顯示Http2請求數據正確

 

2、引用外部的java源碼

(1)java源碼,右鍵--Properties,查看java源碼的存放路徑

public class BeanShell {

	public static String[] beanShellMethod(String str){
		
		 String[] arr = new String[2];
		   
		//截取/前的字符串
	        arr[0] = str.substring(0,str.indexOf("/"));
			
		//截取/後的字符串
	        arr[1] = str.substring(str.indexOf("/")+1);
			
	        return arr;
									
	}	
}

(2)BeanShell取樣器中要引入java源碼的存放路徑,source("E:/jmeterMethod/BeanShell.java");

source("E:/jmeterMethod/BeanShell.java");

String str = bsh.args[0];

BeanShell method = new BeanShell();

String[] array = method.beanShellMethod(str);

for(int i=0;i<array.length-1;i++) {
	String IP = array[i];
	String path = array[i+1];
	vars.put("IP",IP);
        vars.put("path",path);
}

(3)Http2請求中服務器與路徑的數據依賴於BeanShell取樣器中所獲取的IP、path的值

(4)運行後,在察看結果樹中,可以看到獲取到了IP與path的值

 

3、引入外部class文件

(1)DOS中將源碼編譯成class文件

(2)BeanShell取樣器,引入class文件用addClassPath("相對路徑或絕對路徑"),還需用import導入,格式爲: import 包名.類名,注意:包名一定要寫上

注意:addClassPath()是找指定的路徑,source()是找指定的文件

addClassPath("F:\\java\\j\\p\\src");

import com.jyh.BeanShell;

String str = bsh.args[0];

BeanShell method = new BeanShell();

String[] array = method.beanShellMethod(str);

for(int i=0;i<array.length-1;i++) {
	String IP = array[i];
	String path = array[i+1];
	vars.put("IP",IP);
        vars.put("path",path);
}

(3)運行後,在察看結果樹中,可以看到獲取到了IP與path的值

 

4、引入外部jar包

  (1)將jar包複製到jmeter\lib\ext路徑下,這個lib\ext路徑下存放引入外部的一些jar包

(2)BeanShell取樣器,注意一定要用import導入包

import com.jyh.BeanShell;

String str = bsh.args[0];

BeanShell method = new BeanShell();

String[] array = method.beanShellMethod(str);

for(int i=0;i<array.length-1;i++) {
        String IP = array[i];
	String path = array[i+1];
	vars.put("IP",IP);
        vars.put("path",path);
}

(3)運行後,在察看結果樹中,可以看到獲取到了IP與path的值

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章