定时器: BeanShell Timer
前置处理器:BeanShell PreProcessor
采样器: BeanShell Sampler
后置处理器:BeanShell PostProcessor
断言: 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
BeanShell取样器:可以理解为一个小型的Java解释器当我们要执行一些复杂的操作的时候例如给密码通过特殊的算法来加密解密,可能通过Jmeter自带的插件很难完成,这时候我们可以通过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文件如何实现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、运行结果如下:
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、运行结果如下:
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、通过${}可以直接调用。