大家在使用jmeter时,应该经常会见到BeanShell的出现,取样器、前置处理器、后置处理器、断言、定时器中都支持BeanShell操作。
那BeanShell到底是什么呢?
然后BeanShell的作用是什么呢?我觉得主要有几种使用场景和方式。
下面分别跟大家详细介绍一下:
一、使用BeanShell自有的语法,解决以下问题:依据第一个接口的学生分数,生成第二个接口入参使用的考试评价E、A、B等值。
//获取Jmeter同一线程组中的学生姓名和分数:
String _name1 =vars.get(“student1”);
String _score1 =vars.get(“score1”);
//将分数转换为整型
Int i_score1=Integer.parseInt(_score1);
//对分数做逻辑判断
If (i_score1>90){
//如果>90,定义一个变量i_result1为E。
vars.put(“i_result1”,”E”);
}else If (i_score1>70){
//否则,定义一个变量i_result1为A。
vars.put(“i_result1”,”A”);
} else{
//否则,定义一个变量i_result1为B。
vars.put(“i_result1”,”B”);
}
Log.info(“这是学生考核:”+i_result1);
将该BeanShell写在 第二个接口请求的前置处理器里,就可以引用${i_result1}参数了。
二、引用编译好的Jar包,调用特定的类和方法。
以md5加密方法为例:
首先在测试计划,填加目录或jar包到ClassPath中,如上图。
然后就可以写BeanShell语法import导入和调用该方法了。
Importcom/util/md5util
//***
String i_md5=md5util.getMd5Hex(参数1+参数2+参数3);
vars.put(“resutl_md5”,i_md5);
将该BeanShell写在 第二个接口请求的前置处理器里,就可以引用${resutl_md5}参数了。
如需调试查看则可以使用调试取样器来查看。
三、引用未编译的java类,调用特定的类和方法。
和第二项不同,引用源码类不能用import了,需要使用source。例如:
Source(“E:/md5util.java”);
//**
其他代码同前,就不重复写了。
四、使用自有的语法,设置Jmeter的全局变量Faliure。
该项功能主要用在断言部分的编写。还是按学生成绩来判断:
//获取Jmeter同一线程组中的学生姓名和分数:
String _name1 =vars.get(“student1”);
String _score1 =vars.get(“score1”);
//将分数转换为整型
Int i_score1=Integer.parseInt(_score1);
//对分数做逻辑判断
If (i_score1>60){
Failure=false; //成功
FailureMessage=”考试通过”
}else{
Failure=true; //成功
FailureMessage=”考试失败”
}
以上四种情况,是我目前学习总结到的几处jmeter使用BeanShell的地方,大家可以依据实际使用情况随时留言和讨论。希望能对大家更好地使用Jmeter有所帮助。