美文网首页
Jmeter:用BeanShell PostProcessor

Jmeter:用BeanShell PostProcessor

作者: 粥一样温柔 | 来源:发表于2021-11-06 17:12 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/gzfswqtx.html