BeanShell是什么?
- BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
- BeanShell是一种松散类型的脚本语言;
- BeanShell是用Java写成的,一个小型的、免费的、可以下载、嵌入式的Java源代码解释器,具有对象脚本的特性;
- BeanShell可以执行标准Java语句和表达式,以及另外自身的一些脚本命令和语法。
Jmeter中有哪些BeanShell组件
- 定时器:BeanShell Timer
- 前置处理器:BeanShell PreProcessor
- 采样器:BeanShell Sampler
- 后置处理器:BeanShell PostProcessor
- 断言:BeanShell Assert(使用方法连接)
- 监听器:BeanShell Listener
BeanShell常用内置变量
Jmeter在它的BeanShell中内置了变量,用户可以通过这些变量和Jmeter进行交互,其中主要的变量及使用方法如下:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.threads.JMeterVariables;
LocalDateTime time = LocalDateTime.now();
String date = time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//打印调试日志写入。写入信息到jmeter.log
log.info("----->" + date);
//****************************vars使用********************************//
//变量生成
vars.put("tmp" , date);
//变量读取
String date1 = vars.get("tmp");
log.info("值读取测试结果1------>" + date1);
String date = "${tmp}";
log.info("值读取测试结果2------>" + date1);
//直接获取jmeter自动生成的参数变量,COOKIE__gh_sess 存放了cookies信息,是系统自动添加的
log.info(vars.get("COOKIE__gh_sess"));
//操作map类型注意事项
HashMap map = new HashMap(5);
map.put("test1", "1");
log.info(map.toString());
//************************ctx使用\SampleResult 用法***********************************//
//获取Jmeter当前运行时变量集合。
JMeterVariables var = ctx.getVariables();
//增加变量集合
var.put("hello"," hello world");
//SampleResult需要import对象
import org.apache.jmeter.samplers.SampleResult;
//ctx上下文信息获取,获取上一个请求result
SampleResult result = ctx.getPreviousResult();
//getRequestHeaders()方法返回String字符串
String RequestHeaders = result.getRequestHeaders();
//getResponseHeaders() 返回响应headers
String ResponseHeaders = result.getResponseHeaders()
//getResponseCode() 返回响应状态码字符串
String responseCode = result.getResponseCode();
//getURL() 返回请求URL对象
URL url = result.getURL();
//获取上一个请求的响应信息
String code = result.getDataType();
//设置当前的sampler的code
ResponseCode = 500;
//设置当前的sampler的message
ResponseMessage = "This is a test";
//***********************prev信息*******//
#获取响应信息
String str = prev.getResponseDataAsString();
#获取响应Code
String str = prev.getResponseCode();
BeanShell导入JAR包并调用接口
package com.welab.sun.util;
import java.util.Arrays;
import java.util.Map;
import org.apache.commons.codec.digest.DigestUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
/**
* 测试签名
*
* @author one.xu
*
*/
public final class SignatureUtil {
private SignatureUtil() {
}
public static String getSignature(String json, String secret) {
“”“”“”
省略
“”“”“”
}
}
导出jar包叫sunSignature.jar
导出Jar包如下,并将此jar包复制到 jemeter跟目录 \lib\ext 之后重启jemeter
BeanShell脚本如下:
#引用时必须加.*,com.welab.sun.util是包名
import com.welab.sun.util.*;
SignatureUtil sign = new SignatureUtil();
String Signature=sign.getSignature(json,secret);
vars.put("Signature",Signature);
如果遇到class找不到,可能是导入包有冲突,多加几种导入方式