什么是BeanShell
- BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
- BeanShell是一种松散类型的脚本语言;
- BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k;
- BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。
jmeter有哪些BeanShell控件
- BeanShell定时器(BeanShell Timer):可执行java的sleep等待,Thread.sleep的传参可以是固定的毫秒时间,也可以传入定义好的变量值,如图:
- BeanShell前置处理器(BeanShell PreProcessor):在请求接口前执行,可执行加密、参数赋值等预操作,如图:
BeanShell用法
- 以BeanShell PreProcessor和BeanShell断言为例,其他BeanShell控件可类推。使用BeanShell调用工具类,实现加解密功能。
- 导入Jar包,将需要引用的jar包放在jmeter的\lib\ext目录下,若Jmeter已打开,需要重启。
- 创建BeanShell PreProcessor(测试计划->线程组->取样器->HTTP请求->前置处理器-> BeanShell PreProcessor)
- 在BeanShell PreProcessor中import导入的加解密jar包(通常由开发提供),调用其中的加密方法,将加密后的接口报文通过vars函数,保存在变量cryptMsg中。
- 传递加密报文给接口,如图所示,步骤三中将加密后的报文赋值给变量cryptMsg,故接口的消息体中传递变量cryptMsg即可。
- 创建BeanShell断言(测试计划->线程组->取样器->HTTP请求->断言->BeanShell断言),import导入的加解密jar包,调用解密方法,将响应报文进行解密,对解密后的响应结果进行断言。
常用的jmeter内置变量
变量名 | 说明 |
---|---|
log | 写入信息到jmeter.log文件,使用方法:log.info(“文本内容”) |
vars | 操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:- vars.get(String key):从jmeter中获得变量值 - vars.put(String key,String value):数据存到jmeter变量中 |
prev | 获取前面的sample返回的信息,常用方法:- getResponseDataAsString():获取响应信息 - getResponseCode():获取响应code |
props | 操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties:- props.get(“START.HMS”)注:START.HMS为属性名,在文件jmeter.properties中定义 - props.put(“PROP1”,“1234”) |
ctx | 该变量引用了当前线程的上下文 |
Jmeter导入Jar包方法
- 方法一:测试计划中添加目录或jar包到Classpath
- 方法二:将需要引用的jar包放在jmeter的\lib\ext目录下