Bean Shell常用内置变量
JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:
- log:写入信息到jmeber.log文件,对应org.apache.logging.slf4j.Log4jLogger
使用方法:
log.info(“This is log info!”);
log.debug(“This is log debug!”);
log.warn(“This is log warn!”);
log.error(“This is log error!”);
- ctx:该变量引用了当前线程的上下文;
使用方法:
ctx.getThreadNum() ;
更多使用方法可参考:org.apache.jmeter.threads.JMeterContext。
https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html
- vars: (JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是 Map),它是测试用例与BeanShell交互的桥梁,常用方法:
a) vars.get(String key):从jmeter中获得变量String类型值
b) vars.put(String key,String value):String类型数据存到jmeter变量中
c) vars.getObject(String key):从jmeter中获得变量object值
d) vars.putObject(String key, Object value): 保存对象到jmeter变量中
更多方法可参考:org.apache.jmeter.threads.JMeterVariables
https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html
- props: (JMeterProperties - class java.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。
a) props.get("language");在文件jmeter.properties中定义
b) props.put("PROP1","1234");设置属性
- prev: (SampleResult):获取前面的sample返回的信息,常用方法:
a)prev.getResponseDataAsString():获取响应信息
b)prev.getResponseCode() :获取响应code
更多方法可参考:org.apache.jmeter.samplers.SampleResult
https://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html
- sampler: (Sampler)访问当前samper对象;常用方法
sampler.setName("beanshell1");
sampler.getName();
备注:
对于不知道内置变量是什么类型对应什么类,可打印出来对应类名;再通过类名查找jmeter api文件,查看具体方法。
log.warn("ctx:"+ctx.getClass().toString());
![86f67a7f63d002c955fb3536f029c262.png](https://i-blog.csdnimg.cn/blog_migrate/eea52c54315dcec3f081e0746bc61e66.jpeg)
class 测试结果
Class [B 表示此类是baye [] 及字节数组。
Bean Shell常用引用场景
- 自定义函数
- 引用外部java文件
- 引用外部class文件
- 引用外部Jar包
一、自定义函数:
在BeanShell中,我们可以使用java语言自定义函数来处理特定的逻辑,结合BeanShell的内置对象进行变量的存取,方便我们进行测试提高脚本的灵活性。
示例:
1、在Test Plan中添加一个变量:hello =kitty
![1ad837d0d3579f4131d8623b52330407.png](https://i-blog.csdnimg.cn/blog_migrate/b3d84eb4ee6b032a2fd07083d10b5b6e.jpeg)
定义变量
2、Debug sampler-1和Debug sampler-2什么都不处理,用来查询对比beahshell处理前后的结果
3、BeanShell Sampler中的脚本如下:
![57f3d12685ff9448286da12810f3740c.png](https://i-blog.csdnimg.cn/blog_migrate/65592ea3c716975af7fe73c46ef1792f.jpeg)
设置脚本
4、运行结果:
![a02ac5831aab0a6384f34705ca1493cc.png](https://i-blog.csdnimg.cn/blog_migrate/c6a48be5e0e7531065985c9258c5eccc.jpeg)
beanshell前测试结果
![5d9d65414cfee7097182fc786b235876.png](https://i-blog.csdnimg.cn/blog_migrate/a4ea86046077c59079d4f24c6c57029d.jpeg)
beanshell测试结果
![afa462b466397a703255de5f3429b4ff.png](https://i-blog.csdnimg.cn/blog_migrate/950fc765f96afa700e67e96baff38c52.jpeg)
beanshell后测试结果
二、引用外部java文件:
如果我们已经有现成的java源文件或者class文件时,我们有没有什么办法直接在jemter中引用?示例:
1、假如有一个java 源文件,名为:Myclass.java,代码如下:
package test;public class Myclass{ public int add(int a, int b) { return a + b; } }
2、Bean Shell使用代码如下:
在bean shel中通过source("代码路径")方法引入java,然后调用方法和java一样,new一个class,再调用里面的add 方法。
![fbebf83984944204453e397a4630b245.png](https://i-blog.csdnimg.cn/blog_migrate/5b2a0e78ce70359ec4e7705f8f805d9b.jpeg)
引入类
3、运行结果:
![fecaa8439d3fea8f11893197d07bc0d9.png](https://i-blog.csdnimg.cn/blog_migrate/42fd9a57c80b00b56392bd134d1fe011.jpeg)
测试结果
三、引用外部class文件:
在jmeter中也可以直接引用class文件,示例如下:
1、直接把上例中的java文件编译成class文件。
2、Bean Shell使用代码如下:
用addClassPath("D:")方法引入 class文件,在用import导入包及类,然后就可以像java一样调用了
![e504289905f1eea0248d7f74093e15f7.png](https://i-blog.csdnimg.cn/blog_migrate/24fd4fe05f18ee2b52366ea2252e1e76.jpeg)
引入外部class
3、运行结果:
![1c4b124d4e208f299c412e8710a13db8.png](https://i-blog.csdnimg.cn/blog_migrate/1c4bc8a27ab412d97b6bf87cf3011156.jpeg)
测试结果
四、引用外部Jar包:
上面二、三介绍了如何引用外部java和class文件,如果文件比较多时我们可以把它们打成一个jar包然后在jemter中调用
jmeter中引入jar的方法:
方式一:把jar包放到jmeter目录安装libext下
方式二:在Test Plan的右侧面板最下方直接添加需要引用的jar包,如下图:
![326a23a744d7ee483805dc7c1867c3c8.png](https://i-blog.csdnimg.cn/blog_migrate/862f30000be5d7eb189adfb5d41521ae.jpeg)
导入jar