一、什么是Bean Shell
- BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
- BeanShell是一种松散类型的脚本语言(这点和JS类似);
- BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。
- BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。
二、jmeter中有哪些beanShell
- 定时器: BeanShell Timer
- 前置处理器:BeanShell PreProcessor
- 采样器: BeanShell Sampler
- 后置处理器:BeanShell PostProcessor
- 断言: BeanShell断言
三、BeanShell常用的几个内置对象
①log:写入信息到jmeber.log文件,使用方法:log.info(“你要输出在日志的信息”),注意点是log.info只输出String类型的变量
具体案例如下面演示:
②vars :操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:
a) vars.get(String key):从jmeter中获得数据
b) vars.put(String key,String value):将Java种数据存到jmeter变量中
一个小小的注意点vars.put产生的新变量无法通过BeanShell和日志查看
案例如下:获取登入种的session的值,同时给id赋值让Jmeter读取到:
运行结果如下,可以看到成功读取到了session同时给new这个变量赋了值:
还有一个比较常用的就是prev
prev - (SampleResult):获取前面的sample返回的信息,常用方法:
a) getResponseDataAsString():获取响应信息
b) getResponseCode() :获取响应code
- Failure:是否失败,boolean类型
- FailureMessage:失败日志,在断言失败时显示
四、详解:
1、BeanShell取样器
BeanShell取样器:可以理解为一个小型的Java解释器当我们要执行一些复杂的操作的时候例如给密码通过特殊的算法来加密解密,可能通过Jmeter自带的插件很难完成,这时候我们可以通过BeanShell自己编写脚本来处理。
使用方式:
一、在Beanshell面板直接写脚本
下面我们通过一个简单的例子来了解下
1、通过配置元件“用户定义的变量”,添加两个变量,分别是aa=“aa”,bb="bb",如下图:
2、添加Beanshell取样器,并写一个简单的小功能,实现将“hello,”+aa的值赋值给变量bb:
public static void test(){
String input;
input=vars.get("aa");
String output = "hello,"+input;
vars.put("bb",output);
}
test();
3、在Beanshell之前和之后分别添加取样器,添加监听器-查看结果树,运行查看执行结果
二、引用外部java源文件
还是用上面的例子,简单了解下用java文件如何实现Beanshell
1、用ecplise编写java文件如下:
public class BeanshellMethod {
public static String test(String input) {
String output ="Hello,"+input;
return output;
}
}
2、编写Beanshell取样器脚本如下:
source("D:/software/apache-jmeter-5.1.1/bin/test_beanshell/BeanshellMethod.java"); //java文件地址
String input=vars.get("aa");
String output = new BeanshellMethod().test(input);
vars.put("bb",output);
3、运行结果如下:
三、应用class文件
1、再上一个例子的基础上,进入java文件所在目录,执行javac xxx.java,生成xxx.class文件如下图:
2、编写Beanshell取样器脚本如下:
addClassPath("D:/software/apache-jmeter-5.1.1/bin/test_beanshell"); //指定class文件路径
import BeanshellMethod; //导入BeanshellMethod方法
String input=vars.get("aa");
String output = new BeanshellMethod().test(input);
vars.put("bb",output);
3、运行结果如下:
四、调用jar包
1、继续使用第一个例子,进入ecplise,将java文件导出jar包(在类上点击右键->Export->jar file),并将导出的jar包放置到D:\software\apache-jmeter-5.1.1\lib\ext路径下。这里需要注意下的是,需要重启下jmeter。
2、编写beanshell脚本如下:
import BeanshellMethod; //导入jar包
String input=vars.get("aa");
String output = new BeanshellMethod().test(input);
vars.put("bb",output);
3、运行结果如下:
4、通过${}可以直接调用。