在前文 Beanshell Sampler 与 Beanshell 断言 中,初步阐述了JMeter beanshell的使用,接下来归集整理了JMeter beanshell 中常用的内置对象及其使用。
注:示例使用JMeter版本为5.1
如 API 文档 所言,这是定义变量的类,而这些变量是单个线程的本地属性。听起来有些难理解,其实我们只要知道,这个类的一系列方法基本是在针对变量进行取值和赋值,而且这个取值和赋值行为只对当前线程的变量生效,而非全部线程。
在所有方法中,有两个方法值得重点关注,其他方法感兴趣的可以阅读文档做进一步了解。这两个方法就是 get() 和 put()。
String get(String key) 方法,顾名思义,是取值方法。其要素如下:
void put(String key, String value) 方法,则是赋值方法,其要素如下:
下面通过一个示例,体会一下这两个方法,先建立脚本结构如下:
【用户定义的变量】的作用是:向内存中存入一个变量,参数名为"name",参数值为 “mu”,类似{ “name” : “mu”} 这样一个键值对(仅为示例,JMeter并不是这么存储变量的)
接下来,在【BeanShell取样器】中写入代码:
运行脚本,察看结果树:
更多信息请见:API文档
这个内置对象的类提供了很多方法,但在接口测试中常用的一个方法是 SampleResult getPreviousResult() ,其要素如下:
SampleResult类 【API文档】又提供了很多方法,以提供取样器结果的诸要素,例如:
其他方法请查阅API文档
下面以一个示例进行演示,首先创建下面的脚本:
在【beanShell取样器】中写入以下语句:
import org.apache.jmeter.samplers.SampleResult;
// 获取取样器结果
SampleResult result = ctx.getPreviousResult();
// 获取请求头
String RequestHeaders = result.getRequestHeaders();
// 获取响应头
String ResponseHeaders = result.getResponseHeaders();
// 获取响应码
String responseCode = result.getResponseCode();
// 获取响应数据
String responseData = result.getResponseDataAsString();
// 获取url
URL url = result.getURL();
//
//log.info(RequestHeaders);
//log.info(ResponseHeaders);
log.info(responseData);
运行脚本,在控制台可以看到相应的日志输出:
JMeter还提供了一个内置对象 prev,该内置对象可以直接使用 SampleResult 类中的方法,将上面示例中的【beanShell取样器】的语句修改成下面的:
// 获取请求头
String RequestHeaders = prev.getRequestHeaders();
// 获取响应头
String ResponseHeaders = prev.getResponseHeaders();
// 获取响应码
String responseCode = prev.getResponseCode();
// 获取响应数据
String responseData = prev.getResponseDataAsString();
log.info(RequestHeaders);
log.info(ResponseHeaders);
log.info(responseData);
运行后,发现效果是一样的。