beanshell是jmeter内嵌的一个java解释器,大概175k,比较小,你可以在这个元件中运行自己的脚本,前置处理器,定时器,取样器,断言,监听器都有beanshell元件,但是都大同小异,先来看beanshell前置处理器
reset interpreter:是否每次都重启解释器,可以不用动,但是大并发量的情况下官方建议改为true
parameter:其中的数据会被自动转换出string类型,不需要加“”,第一个参数用bsh.args[0]调用,第二个参数用bsh.args[1]调用,Parameters可以引用全部的参数,如图所示:
File name:要引用的脚本地址
script:我们自己编写脚本的地方
常用的内置变量有:
log:log.info(string s),打印如上,也可以log.error(string s),不过这个会有红色警告
ctx:访问上下问,比如线程的编号等
vars:这个是最常用的,用来设置变量以便后面引用,常用的方法,vars.put(string s,string s1 ),vars.get(string s),vars.putObject(string s,Object o),vars.getObject(string s )
props:访问bin目录下面jmeter.properties中的各种属性,也可以修改,常用方法,props.put(string s,string s),props.get(string s)
prev:访问之前的取样器的内容,常用的prev.getResponseDataAsString(),返回的可能是json字符串,需要用json库去解析。
常用的beanshell有:
beanshell前置处理器:用来对数据进行处理,如接口的加密,通过jar包来对参数进行加密,jar包放在lib目录下
beanshell定时器:利用线程的sleep方法来灵活休眠
beashell后置处理器:调用prev变量来获取前面请求的返回值,头部信息等
beashell断言:这个是最好用的,当其他的断言无法满足需求时(如判断返回值是否是一个六位的整数),可以编写代码:
可以在这里做出一些判断,如果不满足则断言失败,方法为SampleResult.setSuccessful(false)或者Failure=true,也可以像上面一样利用prev获取响应的数据。
常用的就这些变量吧,其中ctx中有许多方法,如设置变量等,可以用于线程间的传参,prev可以获取请求和响应的所有内容(请求头,状态码等),总之功能很强大。