• 【Jmeter】Beanshell处理提取出来的列表字符串转数组对象


    前段时间在使用JSON提取器提取接口返回值字段时,遇到个问题:该字段的值是一个列表(数组)字符串,也就是说不能按照Jsonpath的方式继续往下提取字符串列表里面的值了,那么该怎么处理这种情况呢?

    如下图:要提取hierarchy字符串里面的某个objectId值

    使用Json提取器只能提取到hierarchy整个字符串,无法继续往下提取了,Json提取器结果如下

    此时该怎么做呢?

    解决思路:使用fastjson,将字符串列表转为数组,然后按照数组提取需要的值,再将这个值存到变量中,这样就可以在后续请求中使用了

    实现步骤

    1、根据使用的jmeter版本下载对应的fastjson.jar包,下载地址:https://mvnrepository.com/artifact/com.alibaba/fastjson

    2、在jmeter包根路径下新建个文件夹,暂时就叫 third 吧(表示三方下载的包),把下载的fastjson包放在这个目录下,如下:

    3、在测试计划下,添加这个jar包路径

     

    4、在提取到 hierarchy 字符串列表的请求下,添加Beanshell后置处理器,输入以下代码 

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import com.alibaba.fastjson.JSONPath;
    import java.util.List;
    
    try {
        // 将提取到的hierarchy字符串存到变量data中
        String data = vars.get("hierarchy");
        log.info("-----------------------------" + data);
        // 将数组字符串转成数组(注意:如果返回的是字典格式,此处则使用JSONObject来声明变量,同时转化的函数要使用JSON.parseObject,即JSONObject data_arr = JSON.parseObject(data))
        JSONArray data_arr = JSON.parseArray(data);
        log.info("-----------------------------" + data_arr);
        // 由于数组里面是字典,所以此处使用getJSONObject方法来获取指定下标成员字典,然后调用get方法获取字典中指定字段的值
        String item_type = data_arr.getJSONObject(0).get("name");
        log.info("-----------------------------" + item_type);
        // 将获取到的值放到变量item_type中,这样就可以使用${item_type}来调用变量了,注意:变量名必须要用""引起来
        vars.put("item_type", item_type)
    }
    catch (Throwable ex) {
        log.error("Beanshell failure: ", ex);
        throw ex;
    }

    执行结果如下:

  • 相关阅读:
    图,深度,广度优先遍历(一)
    java实现快速排序
    图,深度,广度优先遍历(二)
    图,深度,广度优先遍历(三)
    Jpa动态多表if多条件联合查询(if中包含list不为null和“=”的判断),并对查询结果进行分页
    SpringBoo启动报错:Failed to load property source from location ‘classpath:/bootstrap.yml‘
    Java对象创建和Javabean创建
    Linux解压命令
    BDD测试利器:mocha+should.js
    《老码识途》读书笔记:第一章(中)
  • 原文地址:https://www.cnblogs.com/panpanda/p/15856521.html
Copyright © 2020-2023  润新知