1、beanshell 是什么
BeanShell 是一个小型嵌入式 Java 源代码解释器,完全兼容 java 语法。同时 beanshell 也支持 javascript 和 python 的一些语法。
2、beanshell 常用内置变量
1)log
写入信息到 jmeber.log 文件,使用方法:log.info(“This is log info!”);
2)vars
操作 jmeter 变量,常用方法:</br>
a) vars.get(String key):从 jmeter 中获得变量值</br>
b) vars.put(String key,String value):数据存到 jmeter 变量中</br>
3)ctx
引用了当前线程的上下文,使用方法参考 org.apache.jmeter.threads.JMeterContext
4)props
操作 jmter 属性,该变量引用了 jmeter 的配置信息,可获取 jmeter 属性,使用方法与 vars 类似,但是只能 put 进去 string 类型的值,不能是对象。一般用于线程组间传递变量。
线程组之间传参
props.put(“name”,”value”);添加变量,非临时的,只要添加进去,就保存下来,一直有。
props.remove(“name”);删除变量
有时线程组间获取不到值:两个线程组同时运行,还没传值就开始取
两种方案:① 测试计划中勾选独立运行 ② 线程组,添加 setUp Thread Group
prev-SampleResult
5)prev
获取当前 sample 返回信息,常用如下:
①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、beanshell 常用命令
1)print()
输出内容到命令行中。
2)show()
自动显示你打入的每一行。
3)source(),run()
读一个 bsh 脚本到当前解释器(interpreter)中,或者在新的解释器中运行这个脚本
4)load(),save()
从文件中加载一个序列化对象(serializable object),或者把它保存到文件中
5)cd(),cat(),dir(),pwd(),etc
类似于 Unix 中的命令
4、beanshell 常见用法
1)添加变量
import java.util.*; |
2)自定义函数
getDateStr(String format){ |
3)引入外部 java 文件
①test-beanshell.java 文件内容
public class TestBeanShell{ |
②jmeter beanshell 中使用
source("D:\\test-beanshell.java");//只能导入.java文件,转义windows路径需要2个\ |
4)导入外部 jar 包
① 在 eclipse 写好代码,然后把该类打成 jar 包(在类上点击右键->Export->jar file)
② 把 jar 包放到 jmeter 目录\apache-jmeter-2.13\lib\ext 下
③ 打开 jmeter,添加一个 http sampler,在 sampler 下添加一个 BeanShell Sampler
④ 在 BeanShell 中的头文件中导入该 jar 包,例 import testmail.src.hyq.utils.*
5、beanshell 应用
1)BeanShell PreProcessor
提前处理请求参数,如:图片处理,加密解密、日期处理等。如下是时间处理
import java.text.SimpleDateFormat; |
2)BeanShell PostProcessor
在请求后对返回结果进行处理,如下是在获取到考试试题后的处理,拼接答题记录
import java.lang.reflect.Array; |
//解决乱码问题
prev.setDataEncoding("utf-8"); |
3)BeanShell 断言
验证返回结果的正确性,如下验证 noticeId 的长度
if("${noticeId}".length() != 36) |
4)BeanShell Sampler
发送 beanshell 请求,如下是随意写的内容,直接放在 beanshell sample 下
x=2; |