zoukankan      html  css  js  c++  java
  • 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)获取(注意变量名加引号)

  • 相关阅读:
    模板 无源汇上下界可行流 loj115
    ICPC2018JiaozuoE Resistors in Parallel 高精度 数论
    hdu 2255 奔小康赚大钱 最佳匹配 KM算法
    ICPC2018Beijing 现场赛D Frog and Portal 构造
    codeforce 1175E Minimal Segment Cover ST表 倍增思想
    ICPC2018Jiaozuo 现场赛H Can You Solve the Harder Problem? 后缀数组 树上差分 ST表 口胡题解
    luogu P1966 火柴排队 树状数组 逆序对 离散化
    luogu P1970 花匠 贪心
    luogu P1967 货车运输 最大生成树 倍增LCA
    luogu P1315 观光公交 贪心
  • 原文地址:https://www.cnblogs.com/hanmk/p/15170750.html
Copyright © 2011-2022 走看看