Jmeter 的 BeanShell

发布时间 2023-08-16 10:57:29作者: HinaJin

通过 BeanShell 可以访问 ctx、vars、props、prev、sampler、log;
1.通过 ctx 可以访问 jmeter 运行时状态,比如线程数及线程状态;

ctx:获取当前线程上下文数据(可获取所有信息);可以通过获取jmeterContent 实例来获取运行时信息;
ctx.getVariables(“变量名”):获取变量值(同vars.get())。
ctx.setVariables(“变量名”, “变量值”):设置变量(同vars.put())。
ctx.getProperties(“属性名”):获取属性值(同props.get())。
ctx.setProperties(“属性名”,“属性值”):设置属性(同props.put())。
ctx.getPreviousResult():获取当前请求结果同(prev)。
ctx.getCurrentSampler():获取当前采样器。
ctx.getPreviousSampler():获取前一采样器。
ctx.getThreadNum():获取线程数。
ctx.getThreadGroup():获取线程组。
ctx.getThread():获取当前线程。
ctx.getEngine():获取引擎。
ctx.isSamplingStarted():判断采样器是否启动。
ctx.isRecording():判断是否开启录制。
ctx.getSamplerContext():获取采样器山下文数据。

eg. ctx.getThreadNum().toString()


2. 通过 vars 访问 jmeter 中定义的变量,也可以在此定义变量供后面的元件调用;

String var1 = vars.get(“变量名”):获取变量的值(假设为String类型)。
vars.put(“变量名”, 变量值):设置变量值。
vars.remove(“变量名”); 删除后其值为空


3. 通过 props 访问 jmeter 运行时设置;

props.get(String) 可以获取JMeter中已经生成的属性。
props.put(String,String)可以创建和更新JMeter属性。
props.setProperty(String,String); 设置属性值,与 put类似
pPC = props.size(); 获取有多少 属性
log.info("pPC: " + pPC);
props.remove("String")


4. 通过 prev 访问 前一个取样器结果;获取响应体数据(String类型):

prevResponse = prev.getResponseDataAsString();
log.info("prevResponse:" + prevResponse);

获取状态码(同ResponseCode,String类型):
responseCode = prev.getResponseCode() ;
log.info("responseCode:" + responseCode);

判断响应状态码是否为OK对应的状态码(200),结果只有true和false:
responseCodeBoolean = prev.isResponseCodeOK();
log.info("responseCodeBoolean:" + responseCodeBoolean);

获取线程名:
prevThreadName = prev.getThreadName();
log.info("prevThreadName:" + prevThreadName);

获取请求内容: prev.getSamplerData();
获取请求开始时间: prev.getStartTime();
获取请求结束时间: prev.getEndTime();
获取接口的url路径:prev.getUrlAsString();


5. 通过 sampler 来访问当前取样器件;
6. 通过 log 写日志,输出信息到日志(文件),只能打印字符串;

log.debug(“调试信息”)
log.info(“响应状态码” + ResponseCode)
log.warn(“警告信息”)
log.error(“出错信息”)

eg.1

String  result = prev.getResponseDataAsString();

if(result.contains("error")){
  Failure=true;
  log.error("接口失败: " + result);
}

if(result.contains("Connection refused")){
  Failure=true;
  log.error("服务器连接拒绝: " + result);
}

 

eg.2 

将返回结果写到文件中:
String resp=prev.getResponseDataAsString(); // 获取响应的内容
FileWriter wr; // 构建一个文件的写入方法
wr= new FileWriter("D://tool//temp//file.json",true); //新建一个写入文件
wr.write(resp); //将获取的内容写入文件
wr.flush(); // 刷新文件
wr.close(); //关闭文件

 

eg.3