一、Bean shell是什么
·BeanShell是一种完全符合Java语法规范的脚本语言;
·BeanShell并且又拥有自己的一些语法和方法的脚本语言(和JS类似);
·BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器;
·BeanShell具有对象脚本语言特性;
·BeanShell是非常精简的解释器,是一个jar文件(大小为175k)。
二、Bean shell种类
·定时器: BeanShell Timer
·前置处理器:BeanShell PreProcessor
·采样器: BeanShell Sampler
·后置处理器:BeanShell PostProcessor
·断言: BeanShell断言
·监听器: BeanShell Listener
三、使用Bean shell
此节详细介绍BeanShellPreProcessor的使用方法,其它的beahshell使用方法类似,就不一一介绍。参考此方法即可。如使用beahshell调用自己写的工具类,工具类实现了密码的加密、解密的功能:
1、在eclipse写好加密、解密的代码,然后打成jar包(选中该类点击右键->Export->jar file)
2、把打好的jar包放到jmeter目录下的apache-jmeter目录的lib\ext下;
3、打开jmeter,添加http sampler,在sampler下添加一个BeanShell PreProcessor;
4、在beanshell PreProcessor导入步骤一的jar包,调用jar包里的加密码方法和解密码方法,并把结果保存在jmeter变量中,下面两个是beanshell中最常用到的方法:
·vars.get(String paramStr):获取变量值
·vars.put(String key,String value):把数据存到jmeter变量。
//加密
String password ="123123";
String encode =SecurityUtils.getKey(password);//调用工具类中的方法进行加密
vars.put("encode",encode);//把值保存到jmeter变量encode中
StringgetEncode=vars.get("encode");
5、把加密后的密码存到jmeter变量中,然后在http sampler中就可通过$使用:
6、执行测试脚本:
四、Bean shell常用内置变量
JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:
·log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);
·vars- (JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:
a) vars.get(String key):从jmeter中获得变量值
b) vars.put(String key,String value):数据存到jmeter变量中
·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
·sampler- (Sampler):givesaccess to the current sampler
五、操作Bean shell变量
通过使用Bean shell内置对象vars可以对变量进行存取操作
a) vars.get("name"):从jmeter中获得变量值
b) vars.put("key","value"):数据存到jmeter变量中
六、操作Bean shell属性
通过使用Bean shell内置对象props可以对属性进行存取操作
a)props.get("START.HMS"); 注:START.HMS为属性名,在文件jmeter.properties中定义
b)props.put("PROP1","1234");
七、自定义Bean shell函数
在BeanShell中,我们可以使用java语言自定义函数来处理特定的逻辑,结合BeanShell的内置对象进行变量的存取,方便我们进行测试提高脚本的灵活性。
示例:
1、在TestPlan中添加一个变量:hello =kitty
2、Debugsampler-1和Debugsampler-2什么都不处理,用来查询对比beahshell处理前后的结果
3、BeanShellSampler中的脚本如下:
八、引用外部java文件
有没有觉得上面(三)中自定义函数这样的方式太麻烦并且也不美观?而且如果我们已经有现成的java源文件或者class文件时,我们有没有什么办法直接在jemter中引用?这就是这部分要介绍的内容,直接上示例:
1、假如我有一个java源文件,名为:Myclass.java,代码如下:
packagetest;
publicclassMyclass
{
publicintadd(inta,intb)
{
returna +b;
}
}
2、Bean Shell使用代码如下:
九、引用外部class文件
在jmeter中可以直接引用class文件,方法如下:
1、BeanShell使用直接引用class文件,示例代码如下:
用addClassPath("D:\\")方法引入class文件,再用import导入包、类,然后就可以像java一样调用了。
2、运行结果:
十、引用外部Jar 包
前面已经介绍了如何引用外部java和class文件,如果文件比较多,可以把它们打成一个jar包,再在jemter中调用。调用方法前面已经讲过,这里介绍如何在jmeter中引入jar的方法:
1、把打好的jar包放到jmeter目录下的apache-jmeter目录的lib\ext下;
2、在TestPlan的右侧面板最下方直接添加需要引用的jar包,如下图:
十一、其它
1、在TestPlan中定义如下三个变量:
2、在BeanShell中使用变量的方法如下:
a、beanshell可接受传入参数,如下图:$$ $;
b、参数可通过bsh.args[]按顺序获取;
c、beanshell还提供了一个用来保存参数集合的内置变量Parameters;
3、运行后,结果如下:
在下图的“1”中输入如下设置:
ResponseCode = 500;
ResponseMessage = "This is a test";
在下图的“2”中输入如下设置:
log.info(Parameters);
log.info(Label);
请关注
领取专属 10元无门槛券
私享最新 技术干货