一、beanshell的用处
数据库断言、加密、调用jar包
二、beanshell分类
前置处理器
后置处理器
定时器
采样器
断言
监听器
beanshell有自己的语法,同时支持java的语法
三、beanshell自带的语法
打印日志
log.info("打印信息级别的日志");
log.error("打印报错级别的日志 ");
System.out.println("java打印日志");
vars
作用:读写jemter的局部变量,不能跨线程组
vars.put("city","56778"); //使用vars.put定义一个变量名字叫city,赋值为56778,在取样器里使用${city}来引用变量变量:
log.info(vars.get("name")); //使用vars.get可以获取它处定义的变量的值
props
作用:读写jmeter的全局变量(跨线程组)
props.put("name","zhangsan"); //线程组A定义变量
String name = props.get("name"); //在线程组B里获取A里定义的变量name
vars.put("name_b",name); //需要重新赋给新的参数才能使用
log.info("name_b的值为:"+ name_b);
prev
作用:读取结果返回的结果
String result = prev.getResponseDataAsString();
String code = prev.getResponseCode();
log.info("获取的响应结果是:" + result);
log.info("获取的响应编码是" + code);
调用其他文件 java、jar包、class文件
MD5, Base64,SHA,RSA,签名,混合加密
//调用java文件
source("E:\\Test.java");
//调用java文件中的类,生成一个对象并调用他的方法
int result = new Test().add(3,6); //Test是里面的类名,add是类里的方法
log.info("result:"+result);
//调用jar包
//先在测试计划里导入jar包
import mashang.Test //mashang是jar包里的package名字,Test是类的名字, 接下来的步骤跟调用java文件一样
int result = new Test().add(3,6); //Test是里面的类名,add是类里的方法
log.info("result:"+result);
//调用class文件
addClassPath("E:\\");//家这样一句 后续跟上面的一样
import mashang.Test
int result = new Test().add(3,6);
log.info("result:"+result);
四、beanshell读取返回值,写入文件
//接口返回的数据如下
{
"code": "000000",
"msg": "success",
"timestamp": "2023-06-30 11:16:03",
"data": {
"records": [{
"id": 10202880634,
"apprvId": null,
"courseVnoId": 10202880635,
"version": 1,
"courseName": "土建质量员1",
}, {
"id": 10202880624,
"apprvId": null,
"courseVnoId": 10202880625,
"version": 1,
"courseName": "土建质量员2",
}],
"total": 2,
"size": 10,
"current": 1,
"pages": 1
}
}
获取上面json里courseVnoId的值并且保存到文件里
//导入json包
import com.alibaba.fastjson.*;
//获取获取请求的返回值
String response_data = prev.getResponseDataAsString();
//日志打印获取请求的返回值
log.info(response_data);
//将String类型的返回值构造成JSONObject对象
JSONObject data_obj = JSONObject.parseObject(response_data);
//获取data的值 并且转换成JSONObject对象
data = data_obj.getString("data");
JSONObject data_o = JSONObject.parseObject(data);
//将records转成数组
JSONArray records_array=data_o.getJSONArray("records");
//获取数组长度
int len = records_array.size();
log.info(len.toString());
// 先把文件里的内容清空
FileWriter clrstream=new FileWriter("C:/Users/ASUS/Desktop/jmter test data/response courseId.csv",false);//本地存储文件路径
BufferedWriter clrout = new BufferedWriter(clrstream);
clrout.write("");
clrout.close();
clrstream.close();
//再次打开文件写入这次运行的结果 先把文件打开
FileWriter fstream=new FileWriter("C:/Users/ASUS/Desktop/jmter test data/response courseId.csv",true);//本地存储文件路径
BufferedWriter out = new BufferedWriter(fstream);
for(int i=0;i<len;i++){ //循环获取数组里需要的值
JSONObject r = (JSONObject)records_array.getJSONObject(i);//把data里的每个json单独取出来 转换成JSONObject对象
String courseVnoId = r.get("courseVnoId").toString(); //获取需要的值
log.info(courseVnoId);
//写入文件
out.write(courseVnoId);
out.write(System.getProperty("line.separator"));
}
//关闭文件
out.close();
fstream.close();