Beanshell处理器

本文介绍了Beanshell在性能测试工具JMeter中的多种用途,包括作为前置处理器、后置处理器等,以及如何进行日志打印、读写变量、调用Java代码和处理JSON数据。此外,还展示了如何利用Beanshell进行数据库断言和加密操作,并将接口返回值写入文件。
摘要由CSDN通过智能技术生成

一、beanshell的用处

数据库断言、加密、调用jar包

二、beanshell分类

前置处理器

后置处理器

定时器

采样器

断言

监听器

beanshell有自己的语法,同时支持java的语法

三、beanshell自带的语法

  1. 打印日志

log.info("打印信息级别的日志");

log.error("打印报错级别的日志 ");

System.out.println("java打印日志");

  1. vars

作用:读写jemter的局部变量,不能跨线程组

vars.put("city","56778"); //使用vars.put定义一个变量名字叫city,赋值为56778,在取样器里使用${city}来引用变量变量:

log.info(vars.get("name")); //使用vars.get可以获取它处定义的变量的值

  1. 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);

  1. prev

作用:读取结果返回的结果

String result = prev.getResponseDataAsString();

String code = prev.getResponseCode();

log.info("获取的响应结果是:" + result);

log.info("获取的响应编码是" + code);

  1. 调用其他文件 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();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值