jmeter中beanshell脚本的使用

周末学习了一下beanshell脚本的使用,下面用一个例子演示下

首先一个请求A的响应内容如下

{
    "status": "ok",
"msg": "ok",
    "data": {
        "records": [{
            "id": 223,
            "contractClassify": null,
            "contractClassifyId": 874,
"contractTypeId": 2,
            "formId": "135",
            }, 
            {
            "id": 229,
            "contractClassify": null,
            "contractClassifyId": 874,
"contractTypeId": 1,
            "formId": "137",
            ],
            
        "total": 13,
        "size": 10,
        "current": 1,
    },
}

在进行处理前,先把一个jar包放进jmeter安装目录下的lib目录下 json-20180130.jar

在请求A下新增一个BeanShell后置处理器,然后可以在里边编写脚本来处理数据

1、首先先把返回内容转为一个json对象

  • 使用 prev.getResponseDataAsString()获取上个请求的返回数据(字符串格式);
  • 利用 JSONObject 将返回数据构造成一个 JSONObject对象,并将其赋给 responseData;
  • 使用log.info()打印一下结果,注意在使用log.info()时需要使用toString()将json对象转为字符串才能正常打印
import org.json.*;

String responseData = prev.getResponseDataAsString(); //获取请求的返回结果

JSONObject response = new JSONObject(responseData);  //把返回值构造为json对象

log.info("response="+response.toString());  // 打印一下结果

 2、获取返回数据中的 "data"

  • 使用 xx.get(key) 获取某个字段的内容
data = response.get("data"); //获取返回数据中的data
log.info("data="+data.toString());

3、获取 "data"下的"total"

  • 如果json对象下嵌套了json对象,可以继续使用 .get(key) 来获取嵌套字段的内容
total = response.get("data").get("total"); //获取返回数据中data下的total
log.info("total="+total.toString());

 

 4、获取 "data"下"records"的内容

  • 由于records的内容是个数组,所以要使用 getJSONArray() 来获取它的数据
records = response.get("data").getJSONArray("records");  //使用getJSONArray提取records数组
log.info("records="+records);

5、获取record数组的长度

int len = records.length();  // 获取数组的长度
String strlen = Integer.toString(len); //转为字符串
log.info("len="+strlen); // 打印结果,其实直接打印len也行

 6、设置一个新变量,给后面请求使用

vars.put("temp", String.valueOf(total)); // 创建一个变量temp,并把total的值转成字符串赋给它(必须转成字符串再赋给temp,不然会报错,也可以使用total.toString()转换)

再新建一个请求B,然后在请求B下添加一个BeanShell后置处理器,如下

这个BeanShell脚本如下

String temp1 = vars.get("temp");
log.info("temp1="+temp1)

执行结果如下

可以看到变量temp在下一个请求中引用成功,并且在后续的beanshell脚本中也能通过 vars.get(String key)获取(注意变量名加引号)

 

 

 

posted @ 2021-08-22 09:13  我是冰霜  阅读(1350)  评论(0编辑  收藏  举报