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的值

 

  • 18
    点赞
  • 192
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值