BeanShell是一种脚本语言,一种完全符合java语法的java脚本语言,并且又拥有自己的一些语法和方法,beanShell是一种松散类型的脚本语言(这点和JS类似)。jmeter中就有这个内嵌的脚本页面,支持我们动态更加灵活的处理数据。首先从在jmeter中常用的变量说起
一、beanshell常用内置变量
1.vars
这个变量是所有内置变量中最有用的,它的本事是Map,Map是用键值对形式来存取变量的,常用方法:
vars.put(String key,String value) //通过键值对来存变量
vars.get(String keys) //获取key为keys的变量值
vars.putObject(String key,new Object()) //通过键值对来存一个对象
vars.getObject(key) //获取key为keys的对象
2.prev
一般用于前置处理器中,获取前面sample返回的信息,常用方法:
prev.getResponseDataAsString() //获取前面sample的响应信息
prev.getResponseCode() //获取前面sample的响应code
3.log
看到log就知道是日志打印,常用方法:
log.info("要打印的信息")
日志查看在
勾选即可
二、搭建整个测试样本
这里我们使用之前说的那个电话号码的请求,如图搭建三个请求,请求一填好如下接口数据
该接口的返回数据为
三、Beanshell预处理器(BeanShell PreProcessor)
在jmeter的前置处理器元件中,一般用于提取前面样本的响应信息,来作对比或者可以使用,同时它也可以在执行请求之前添加一些用到的参数,数据等。提前处理请求参数,如:加密解密。
在请求2中添加一个
在处理器脚本中写上,主要是用调试取样器来看我们是否有获取到前面方法返回的响应信息和响应码
vars.put("result",prev.getResponseDataAsString());
vars.put("ReturnCode",prev.getResponseCode());
vars.get("result");
vars.get("ReturnCode");
执行测试,查看察看结果树
我们想让它打印的信息都打印出来了,不仅可以比对结果,还可以进行其它处理,具体根据业务逻辑来
四、Beanshell取样器(BeanShell Sampler)
同样,也是可以对数据进行一些处理,比如网上最常见的一个例子就是获取当前时间之后,用beanshell对时间进行处理,再在其它地方引用这个时间,比较灵活
然后添加如下脚本
import java.text.SimpleDateFormat;
import java.util.*;
String str1 = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
String str2 = new SimpleDateFormat("HH:mm:ss.SSS").format(new Date());
String str3 = new SimpleDateFormat("HH:mm:ss").format(new Date());
vars.put("str0",str1+"T"+str3+".000"+"对时间进行了处理");
vars.get("str0");
直接执行,查看结果:
这些数据同时也可以用到其它请求上,直接使用${var中的key}来调用
五、BeanShell 后置处理程序(BeanShell PostProcessor)
和前置处理器类似,只不过元件在后置处理器中,一般用于对响应数据处理,比如要把响应数据保存到本地或者一些其它用途。其实beanshell的元件都很类似,分为前置后置等之后对我们使用更加方便,也有很多相同用途,只是作用的地方不同。这个就不作具体介绍了,看了前面的后也能使用这个,会使用就能行,具体的代码和功能还是要根据业务逻辑来写。
另外beanshell上方都有一个参数传递,使用方法如下:
参数用空格分开,直接用bsh.arg[下标]获取