接口测试 十四、Jmeter 中 Beanshell 的使用

Maple · 2020年12月18日 · 1202 次阅读

Beanshell 介绍

Beanshell 是一种轻量级的 Java 脚本,纯 Java 编写的,能够动态的执行标准 java 语法及一些扩展脚本语法,类似于 javaScript,在工作中可能用的多的就是:

  • Beanshell 取样器:跟 Http 取样器并列

  • Beanshell 前置处理器:一般放在 Http 请求下,在请求后处理一些数据

  • Beanshell 后置处理器:一般放在 Http 请求下,在请求前处理一些数据

  • Beanshell 断言:一般放在 Http 请求下,做一些复杂断言

常用内置变量

log

打印日志,我们常常可以用来调试问题,使用举例

  1. log.info("你想打印的内容")
  2. log.error("你想打印的错误内容")

vars 和 props

区别:

  • vars 只能在当前线程内使用,props 可以跨线程组使用
  • vars 只能保存 String 或者 Object,props 是 Hashtable 对象

vars 常用方法:

  1. vars.get(String key):从 jmeter 中获得变量值;
  2. vars.put(String key,String value):数据存到 jmeter 变量中;

props 常用方法:

  1. props.put("token","ertyuiahdg127423g4hjdkacnb");
  2. props.get("token");

prev

获取前面的 sample 返回的信息,常用方法:

  1. prev.getResponseDataAsString():获取响应信息
  2. prev.getResponseCode() :获取响应 code

综合运用

一般来说,我们接口返回都是标准的 json 格式数据,例如:

{"datas":[
{"name":"张三","age":18,"address":"河北","phone":"1311111111"},
{"name":"李四","age":28,"address":"北京","phone":"13222222222"},
{"name":"王五","age":23,"address":"江苏","phone":"13333333333"},
{"name":"赵六","age":32,"address":"湖北","phone":"13444444444"},
{"name":"玛丽","age":45,"address":"美国","phone":"13555555555"},
{"name":"亨利","age":39,"address":"法国","phone":"13666666666"}]
}

那我就需要使用一些专门处理 json 数据的 jar 包来对数据进行二次加工,这里举例使用 json.jar,具体代码如下:

//从json.jar导入所需要的类
import org.json.JSONObject;
import org.json.JSONArray;

//从变量获取数据,因为我在用户自定义变量设置的上面的json数据
String response = vars.get("response");
// 打印日志看看是否取到
log.info("看看response:"+response);
//String reponse = prev.getResponseDataAsString();//如果从接口取,可以这么写

// String 转化成JSONObject
JSONObject resObj = new JSONObject(response);
// 去除datas下的数据
JSONArray resArray = resObj.get("datas");
log.info("取出resArray:"+resArray.toString());//注意,需要把array转成String才能打印

// 遍历取出年龄>30的数据,并存入新的JSONObject
JSONObject newObj = new JSONObject();//定义一个空的JSONObject
for(JSONObject item:resArray){
  int age = item.get("age");//取出age
if(age>30){
String name = item.get("name");//取出name作为key
    newObj.put(name,age);
  }
}
// 打印下取出的数据正确与否
log.info("大于30的人:"+newObj.toString());
// 存入变量,供下面接口使用
vars.put("newObj",newObj.toString());

我们看下日志

好了,Beanshell 语法介绍到这!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册