JMeter 里面有几个用到 Beanshell 的地方,这里作统一介绍。
- Beanshell Sampler – 一个独立的 Beanshell 请求
- Beanshell PreProcessor – sample 的一个预处理装置,在 sample 之前执行,可用来作为执行的先决条件(例如产生某些输入)
- Beanshell PostProcessor – 在 sample 之后再执行的一个提交处理器,可用来恢复数据或清除数据
- Beanshell Assertion – 一个访问 JMeter API 的后期断言装置,Java 的逻辑可以被用来设置这个断言的结果
- __Beanshell Function – 允许在 sample 执行期间,客户自定义 Beanshell 代码的 JMeter 函数
下面说明会经常使用的 Beanshell 语法:
假设你有个自定义的变量 id,想给这变量重新赋值,那么你可以使用 vars 操作相关变量
获取变量:vars.get("id");
给变量赋值:vars.put("id","J_123456");

如果你想对 JMeter 内部属性进行重新赋值,那么可以用 props
它的使用方法与 vars 类似,但是只能 put 进去 String 类型的值,而不能是一个对象。对应于 java.util.Properties。
例:props.get("START.HMS"); 获取线程启动时间
props.get("sampleresult.default.encoding"); 获取默认编码

props.put("sampleresult.default.encoding","gb2312"); 重新给编码格式赋值

prev — JMeter 内置对象【获取前面的 sample 返回的信息】
prev.getResponseDataAsString(); // 获取前一个请求返回的响应数据
getResponseCode(); // 获取响应 code 2××,3××...
小例子
获取前一个请求的结果,得到具体某个返回参数的值,判断是否和预期一致。
访问接口:http://p.3.cn//prices/mgets?skuIds=J_123456&type=1
结果:[{"cbf":"0","id":"J_123456","l":"1999.00","m":"238.00","op":"189.00","p":"-1.00"}]
要取其中的 op 的值,这里是 189.00
1 | data = prev.getResponseDataAsString(); // 获取前一个请求结果 |
ctx — JMeter 内置对象
1 | import org.apache.jmeter.samplers.SampleResult; |
Beanshell 对数组去重
1 | String[] list = new String[]{"111","222","333","444","111"}; |
打印二维数组
1 | String[][] list1 = new String[][]{{"1","A"},{"2","B"},{"3","C"}}; |
自定义函数

引入外部自定义 Java 文件
首先定义一个 Java 文件:



引入外部 class 文件
.java 是 Java 的源文件后缀,里面存放程序员编写的功能代码。
.class 文件是字节码文件,由 .java 源文件通过 javac 命令编译后生成的文件。是可以运行在任何支持 Java 虚拟机的硬件平台和操作系统上的二进制文件。
.class 文件并不是本地的可执行程序。Java 虚拟机就是去运行 .class 文件从而实现程序的运行。
我们这里把 count.java 直接编译成 count.class:使用 javac 命令。


引用外部 jar 包
如果 Java 文件很多的时候,打成个 jar 包怎么导入使用呢?
第一步:需要 export 你的项目,形成 ***.jar 这样的 jar 包。

第二步:引入 jar 包(这里介绍 3 种方式)
(1)将打好的 jar 包放到 JMeter 放置外部 jar 包的文件夹下:C:\Program Files\apache-jmeter-3.0\lib\ext,Beanshell 里 import 即可。(记得重启 JMeter)
(2)测试计划里面添加 jar 包地址

(3)jmeter.properties 文件里添加个外部 jar 包的存放地址(推荐)
修改属性 plugin_dependency_paths:在后面添加绝对地址/相对地址,分号分隔(重启 JMeter)

最后一步:Beanshell 里导入 jar 路径,使用


备注
Beanshell 里使用 log 查看详细日志定位 bug
需要先勾选 选项 -> log viewer。

JMeter 中设置基本参数
1 | // 响应代码 |


JMeter 内置的一些函数
下面简单介绍 JMeter 内置的一些函数,使用方法:
__javaScript
(1)随机数
随机 0 到 9 的整数:${__javaScript(Math.floor(Math.random()*(10)))}
(2)时间
当前时间:${__javaScript(new Date())}

(3)截取字符串
截取字符串,截取第 7 位至第 10 位之间的字符串:${__javaScript("123456789123".slice(7\,10))}

(4)截取字符串并赋值给另外一个变量 mystring:${__javaScript("123456789123".slice(7\,10),mystring)}

(5)比较字符串是否相等,返回 true/false 赋给某个值
${__javaScript("${sp}"=="abcd",MYRESULT)} // 比较变量 sp 是否等于 abcd,把结果赋给 MYRESULT
__V 用法
场景:有 3 个变量(或者更多),假如想循环去取 A1、A2、A3 变量的值。
