jmeter组件-前置处理器-BeanShell preprocessor 嵌套循环(二)

上面一章讲了BeanShell preprocessor的基本用法,本次主要讲更深一步的嵌套循环,

本文中所需要的jar包有:lib\ext\fastjson -1.2.7.jar   postgresql -42.2.5.jar

例如:在使用jmeter做并发测试时,在一个POST请求中,body需要做嵌套循环,则就需要使用前置处理器,body如下:
message:[

{\"\"headerVo\":{\"contractNumber\":\"A0001\",\"schedelId\":\"B0001\"},\"lineVo\":[{\"lineId\":\"C0001\",\"name\":\"appid\"},{\"lineId\":\"C0002\",\"name\":\"appid\"},{\"lineId\":\"C0003\",\"name\":\"appid\"\"}]},

{\"\"headerVo\":{\"contractNumber\":\"A0001\",\"schedelId\":\"B0002\"},\"lineVo\":[{\"lineId\":\"C0004\",\"name\":\"appid\"},{\"lineId\":\"C0005\",\"name\":\"appid\"},{\"lineId\":\"C0006\",\"name\":\"appid\"\"}]},

{\"\"headerVo\":{\"contractNumber\":\"A0002\",\"schedelId\":\"B0003\"},\"lineVo\":[{\"lineId\":\"C0007\",\"name\":\"appid\"},{\"lineId\":\"C0008\",\"name\":\"appid\"},{\"lineId\":\"C0009\",\"name\":\"appid\"\"}]},

{\"\"headerVo\":{\"contractNumber\":\"A0002\",\"schedelId\":\"B0004\"},\"lineVo\":[{\"lineId\":\"C0010\",\"name\":\"appid\"},{\"lineId\":\"C0011\",\"name\":\"appid\"},{\"lineId\":\"C0012\",\"name\":\"appid\"\"}]}

]

数据类型如下:1个合同(contractNumber)对应3个PL(schedelId),1个PL对应3个订单行(lineId),则一个合同对应6个订单行(这里只是举例,工作中一般都是1对200个)

contractNumberschedelIdlineId
A0001B0001C0001
A0001B0001C0002
A0001B0001C0003
A0001B0002C0004
A0001B0002C0005
A0001B0002C0006
A0002B0003C0007
A0002B0003C0008
A0002B0003C0009
A0002B0004C0010
A0002B0004C0011
A0002B0004C0012

                    import  java.util.ArrayList ;

                    import  java.util.List ;

                    import  com.alibaba.fastjson.*;

                   String stust1= "{\"lineId\":\"1111111\",\"name\":\"appid\"}" ;    //订单行

                   String stust2 = "{\"contractNumber\":\"2222222\",\"schedelId\":\"33333333\"}" ;   //PL行

                   String stust3 = "{\"headerVo\":\"44444444\",\"lineVo\":\"55555555\"}" ;   //合成订单行和PL行

                   List listtest1 = new ArrayList() ;

                  List listtest2 = new ArrayList() ;

                  List listtest3 = new ArrayList() ;

                  List listtest4 = new ArrayList() ;

                  List listtest5 = new ArrayList() ;

                 List listtest6 = new ArrayList() ;

                 String regx = "\"" ;

                int c = Integer.parseInt( vars.get("lineId_#"); 这个意思就是一个迭代循环多少次,为了达到上面body的效果,一次设置成12次

               int m = 0 ; int k = 0 ; int n = 0 ;

               String res2 ="";

               String res4 ="";

               String res6 ="";

              String res7 ="";

            String res8 ="";

     for( int i = 0 ; i < c ; i++ ){

    //lineId 订单行数据处理

                   listtest1.add(stust1);

                   String res1 = "" ;

                   res1  = (String )listtest1.get(m) ;

                   JSONObject   jsonob1 = JSONObject.parseobject(res1) ;

                   int j = i +1 ;

                   jsonob1.put("contractNumber",vars.get("lineId_"+j));     

                  res2 = jsonob.toJSONString() ;

                  listtest2.add(res2) ;

                 m = m +1 ;

              //PL分支,因为1个PL对应3个订单行(订单行是最末端,也就是最小粒度)

           if( i%3 == 0){

                   listtest3.add(stust2);

                   String res3 = "" ;

                   res3  = (String )listtest1.get(k) ;

                   JSONObject   jsonob2 = JSONObject.parseobject(res3) ;

                   jsonob2.put("contractNumber",vars.get("contractNumber_"+j));    //这里的contractNumber和schedelId都是从数据库中获取,当然也有其他的获取方式,这里就步再重复了

                  jsonob2.put("schedelId",vars.get("schedelId_"+j)); 

                  res4 = jsonob2.toJSONString() ;

                //合并PL和订单行

                 listtest5.add(stust3);

                 String res5 = "" ;      

                  res5  = (String )listtest1.get(n) ;

                   JSONObject   jsonob3 = JSONObject.parseobject(res5) ;

                   jsonob3.put("headerVo",res4 ); 

                   jsonob3.put("headerVo",listtest2); 

                  res6 = jsonob3.toJSONString() ;

                 listtest6.add(res6) ;

                   listtest2.clear ;

                   res4="";

                 k = k +1 ;

                 n = n+1 ;

                m = 0 ;

          }  }

   res7 = listtest6.toString().replace("\\\"","\"").replace("\"{" , "{").replace("}\"" , "}");

   res8 = res7.repalce(regx,"\\\"");

  vars.putObject("jrbody",res8);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值