Jmeter:用BeanShell PostProcessor 提取json返回数据

Bean Shell常用内置变量

JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:

  • log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);
  • vars (JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:

a) vars.get(String key):从jmeter中获得变量值

b) vars.put(String key,String value):数据存到jmeter变量中

更多方法可参考:org.apache.jmeter.threads.JMeterVariables

  • props - (JMeterProperties - class java.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。

a) props.get("START.HMS");  注:START.HMS为属性名,在文件jmeter.properties中定义

b) props.put("PROP1","1234");

  • prev - (SampleResult):获取前面的sample返回的信息,常用方法:

a) getResponseDataAsString():获取响应信息

b) getResponseCode() :获取响应code

更多方法可参考:org.apache.jmeter.samplers.SampleResult

  • sampler - (Sampler):gives access to the current sampler

如下接口的Json返回数据,想提取三级级节点“行业开发部”的id:

{
    "isSuccess":true,
    "errCode":null,
    "errMessage":null,
    "data":[
        {
            "id":1,
            "parentId":10000,
            "name":"技术一部",
            "childList":[
                {
                    "id":4,
                    "parentId":1,
                    "name":"行业技术部",
                    "childList":[
                        {
                            "id":11,
                            "parentId":4,
                            "name":"行业开发部",
                            "childList":null
                        },
                        Object{...}
                    ]
                },
                Object{...},
                Object{...}
            ]
        },
        Object{...},
        Object{...}
    ]
}

Beanshell代码写法如下:

//先引入Jar包   
import com.alibaba.fastjson.*;
String responseCode = prev.getResponseCode();

//判断接口返回是OK的,如果返回200,则开始取值,否则返回false
if(responseCode.equals("200")){

//获取请求返回值。赋予字符串String 变量
String response = prev.getResponseDataAsString();
// 将string的值转换成成 Jsonobject 对象 
JSONObject response_obj= JSON.parseObject(response); 
log.info("response_obj==============="+response_obj.toString());
    //获取返回值中data下的数组对象
    JSONArray dataArr = response_obj.getJSONArray("data");
        for(Object dataObj0:dataArr ){
             log.info("dataObj0==============="+dataObj0.toString());
             // 遍历数组,获取一级部门“技术一部”下的二级部门
             String deptName0 = dataObj0.getString("name");
             if(deptName0.equals("技术一部")){
                JSONArray childListArr0 = dataObj0.getJSONArray("childList");
                log.info("childListArr0==============="+childListArr0.toString());
                    
                    for(Object childListObj1:childListArr0){
                        log.info("childListObj1==============="+childListObj1.toString());
                            // 遍历数组,获取二级部门“行业技术部”下的三级部门
                            String deptName1 =  childListObj1.getString("name");
                            if(deptName1.equals("行业技术部")){
                                JSONArray childListArr2 = childListObj1.getJSONArray("childList");
                                log.info("childListArr2==============="+childListArr2.toString());
                                
                                for(Object childListObj2:childListArr2){
                                    String deptName3 =  childListObj2.getString("name");
                                    //遍历数组,获取三级部门“行业开发部”的id
                                    if(deptName3.equals("行业开发部")){
                                        String deptId =  childListObj2.getString("id");
                                                                                //把取到的id放到变量deptId3中
                                        vars.put("deptId3",deptId);
                                        log.info("deptId: ==============="+deptId.toString());
                                        }
                                    }
                            }
                    }
                
                }
            }

}else{
    Failure = true; 
    }

运行脚本,变量获取成功


获取成功.jpg

你可能感兴趣的:(Jmeter:用BeanShell PostProcessor 提取json返回数据)