门户网站建设 突出服务,哈尔滨住房和城乡建设局网站,东莞网站建设制作软件,网站建设的资金初识 Jmeter 中的 BeanShell 1.简介1.1 应用场景1.2 BeanShell 类型 2.常用内置变量2.1 log 日志模块2.2 vars 模块2.3 props 模块2.4 prev 模块 3.常见应用场景3.1 Java 文件处理3.2 导入外部 jar 包 BeanShell 是一个小型嵌入式 Java 源代码解释器#xff0c;完全兼容 Java … 初识 Jmeter 中的 BeanShell 1.简介1.1 应用场景1.2 BeanShell 类型 2.常用内置变量2.1 log 日志模块2.2 vars 模块2.3 props 模块2.4 prev 模块 3.常见应用场景3.1 Java 文件处理3.2 导入外部 jar 包 BeanShell 是一个小型嵌入式 Java 源代码解释器完全兼容 Java 语法。同时 BeanShell 也支持 JavaScript 和 Python 的一些语法可谓是一个精巧、集大成的小工具本文我们就重点说说这个小工具能在 Jmeter 接口测试、压测过程中的一些用法。
1.简介
1.1 应用场景
提供的 Java 语法可以做复杂的逻辑或者业务场景的判断。可以引用开发编写好的 jar 包实现功能需要借助【测试计划】模块的 jar 包导入功能。接口测试中处理关联数据。跨线程组共享变量。
1.2 BeanShell 类型
采样器BeanShell Sampler发送 BeanShell 请求。前置处理器BeanShell PreProcessor提前处理请求参数如图片处理加密解密、日期处理等。后置处理器BeanShell PostProcessor可以对请求完成后的响应数据的处理实现接口关联、数据加密处理、解决乱码、中文显示等。定时器BeanShell Timer定时器会让作用域内的每一个采样器都在执行前等待一个固定的时长。断言Beanshell Assertion验证返回结果的正确性。监听器BeanShell Listener监听器用来监听及显示 JMeter 取样器测试结果能够以树、表及图形形式显示测试结果也可以以文件方式保存测试结果。
2.常用内置变量 2.1 log 日志模块
提供不同等级的日志信息输出。
log.info(这是我的第一个beanshell脚本);
log.error(这是一条报错的日志);2.2 vars 模块
全称为 JmeterVariables表示 Jmeter 变量vars 的变量作用域 在同一线程组不可跨线程组。
vars.get(String key)从 Jmeter 中获得变量值。vars.put(String keyString value)数据输出到 Jmeter 变量中。
// 先获取 token 值java 语法
String aa vars.get(token);// 在 aa 的前面添加 Token 前缀
String token1 Token aa;
log.info(token1);//将拼接后的数据再写回到 jmeter 变量中
vars.put(token,token1);2.3 props 模块
操作 Jmeter 属性该变量引用了 Jmeter 的配置信息可获取 Jmeter 属性使用方法与 vars 类似这个全局变量是可以跨线程组的。
// 添加变量非临时的只要添加进去就保存下来一直有
props.put(name,value);// 删除变量
props.remove(name);// 获得一个变量
props.get(key); 2.4 prev 模块
获取当前 Sample 返回响应信息常用如下
// 获取到第一个接口的返回码和返回数据
log.info(prev.getResponseCode())
log.info(prev.getResponseDataAsString())getThreadName获取线程名
log.error(getThreadName: prev.getThreadName());getRequestHeaders获取请求头
log.error(getRequestHeaders: prev.getRequestHeaders());getUrlAsString获取 URL 并转为 String
log.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());3.常见应用场景
3.1 Java 文件处理
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);3.2 导入外部 jar 包
从测试计划模块直接导入外部开发完成的 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 包内的方法。