BeanShell 是一个小型嵌入式 Java 源代码解释器,完全兼容 Java 语法。同时 BeanShell 也支持 JavaScript 和 Python 的一些语法,可谓是一个精巧、集大成的小工具,本文我们就重点说说这个小工具能在 Jmeter 接口测试、压测过程中的一些用法。
jar
包实现功能,需要借助【测试计划】模块的 jar
包导入功能。BeanShell Sampler
):发送 BeanShell 请求。BeanShell PreProcessor
):提前处理请求参数,如:图片处理,加密解密、日期处理等。BeanShell PostProcessor
):可以对请求完成后的响应数据的处理,实现接口关联、数据加密处理、解决乱码、中文显示等。BeanShell Timer
):定时器会让作用域内的每一个采样器都在执行前等待一个固定的时长。Beanshell Assertion
):验证返回结果的正确性。BeanShell Listener
):监听器用来监听及显示 JMeter 取样器测试结果,能够以树、表及图形形式显示测试结果,也可以以文件方式保存测试结果。提供不同等级的日志信息输出。
log.info("这是我的第一个beanshell脚本");
log.error("这是一条报错的日志");
全称为 JmeterVariables,表示 Jmeter 变量,vars
的变量作用域 在同一线程组,不可跨线程组。
vars.get(String key)
:从 Jmeter 中获得变量值。vars.put(String key,String value)
:数据输出到 Jmeter 变量中。// 先获取 token 值,java 语法
String aa = vars.get("token");
// 在 aa 的前面添加 Token 前缀
String token1 = "Token" + aa;
log.info(token1);
//将拼接后的数据再写回到 jmeter 变量中
vars.put("token",token1);
操作 Jmeter 属性,该变量引用了 Jmeter 的配置信息,可获取 Jmeter 属性,使用方法与 vars
类似,这个全局变量是可以跨线程组的。
// 添加变量,非临时的,只要添加进去,就保存下来,一直有
props.put("name","value");
// 删除变量
props.remove("name");
// 获得一个变量
props.get(key);
获取当前 Sample 返回响应信息,常用如下:
// 获取到第一个接口的返回码和返回数据
log.info(prev.getResponseCode())
log.info(prev.getResponseDataAsString())
getThreadName
:获取线程名log.error("getThreadName: " + prev.getThreadName());
getRequestHeaders
:获取请求头log.error("getRequestHeaders: " + prev.getRequestHeaders());
getUrlAsString
:获取 URL 并转为 Stringlog.error("getUrlAsString: " + prev.getUrlAsString());
getSamplerData
:获取 Sample 数据log.error("getSampleData: " + prev.getSamplerData());
getSampleLabel
:获取 Sample 名称log.error("getSampleLabel: " + prev.getSampleLabel());
getResponseCode
:获取响应码log.error("getResponseCode: " + prev.getResponseCode());
getResponseHeaders
:获取响应头log.error("getResponseHeaders: " + prev.getResponseHeaders());
getResponseMessage
:获取响应信息log.error("getResponseMessage: " + prev.getResponseMessage());
getResponseDataAsString
:获取响应数据并转为字符串log.error("getResponseDataAsString: " + prev.getResponseDataAsString());
BeanShell 是可以使用 source()
方法直接导入外部的 Java 文件,并进行直接编程的。
// 导入本地 java 文件,注意使用 \\
source("E:\\3-Learning\\22-BK2301\\javademo\\mianxiangduixiang\\Student.java");
// 直接调用 java 文件中的类生成对象,并且通过这个对象调用里面的方法
Student s = new Student();
String id = s.id;
log.error("student对象s的id属性值为:"+id);
从测试计划模块直接导入外部开发完成的 jar
包,即可导入、使用其中的类和方法。
ToImage.jar
包sun.misc.BASE64Decoder.jar
包code
,用于中转存储验证码数据BeanShell 中即可直接导入使用:
import com.qf.ToImage;
// 先将图像文件读入到此处,转为 base64
String aaa = ToImage.GetImageStr("E:/1.png");
System.out.println(aaa);
// 使用 put 方法将加密的图片数据输出到 code 变量(测试计划中定义)中
vars.put("code",aaa);
补充:也可以将 jar
文件放到 jmeter/lib/ext
目录下,重启 Jmeter 后,即可使用 import
调用 jar
包内的方法。