【Jmeter】Beanshell处理提取出来的列表字符串转数组对象
前段时间在使⽤JSON提取器提取接⼝返回值字段时,遇到个问题:该字段的值是⼀个列表(数组)字符串,也就是说不能按照Jsonpath的⽅式继续往下提取字符串列表⾥⾯的值了,那么该怎么处理这种情况呢?
如下图:要提取hierarchy字符串⾥⾯的某个objectId值
使⽤Json提取器只能提取到hierarchy整个字符串,⽆法继续往下提取了,Json提取器结果如下
此时该怎么做呢?
解决思路:使⽤fastjson,将字符串列表转为数组,然后按照数组提取需要的值,再将这个值存到变量中,这样就可以在后续请求中使⽤了
实现步骤:
2、在jmeter包根路径下新建个⽂件夹,暂时就叫 third 吧(表⽰三⽅下载的包),把下载的fastjson包放在这个⽬录下,如下:
3、在测试计划下,添加这个jar包路径
fastjson怎么用
4、在提取到 hierarchy 字符串列表的请求下,添加Beanshell后置处理器,输⼊以下代码
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPath;
import java.util.List;
try {
// 将提取到的hierarchy字符串存到变量data中
String data = ("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 = JSONObject(0).get("name");
log.info("-----------------------------" + item_type);
// 将获取到的值放到变量item_type中,这样就可以使⽤${item_type}来调⽤变量了,注意:变量名必须要⽤""引起来
vars.put("item_type", item_type)
}
catch (Throwable ex) {
<("Beanshell failure: ", ex);
throw ex;
}
执⾏结果如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。