jmeter-后置处理器-正则表达式提取器-多参数获取

上一篇 / 下一篇  2017-11-08 14:30:47 / 个人分类:Jmeter

场景:jmeter测试时,用户需要通过正则表达式获取一组数据,根据其中一个数据获取另外一个对应的数据,该怎么实现呢。

例如:需要根据OrderMongoId的值获取对应的TradeId的值:
    {
      "CreateTime": "2018-08-20 10:15",
      "TradeAt": "",
      "Name": "入会费",
      "TradeObject": "zhou13917386157",
      "AssociatorNum": null,
      "PayType": null,
      "BalanceMoney": 0.0,
      "Integral": 0,
      "Amount": "¥0.01",
      "Status": "处理中",
      "CompanyId": 217182083,
      "TradeId": 1435444205,
      "TransactionId": 0,
      "OrderBusinessId": "1435444204",
      "OrderId": 1435457367,
      "OrderMongoId": "5b7a245d63419b97186a7815",
      "DisplayOffline": "<a class='btn-link OfflinePayment bind-data-id' data-attr='CompanyId,OrderBusinessId,TradeId,OrderMongoId' data-audittype='OfflinePayment'>线下支付</a>",
      "Delete": "<a class='btn-link DeleteTrade bind-data-id' data-attr='AssociatorId,TradeId'>删除</a>",
      "AssociatorId": 1435444204
    },
    {
      "CreateTime": "2018-08-15 11:26",
      "TradeAt": "2018-08-15 11:26",
      "Name": "单会(1431683456)报名",
      "TradeObject": "00112000000001",
      "AssociatorNum": null,
      "PayType": "",
      "BalanceMoney": 0.0,
      "Integral": 0,
      "Amount": "¥0.00",
      "Status": "交易成功",
      "CompanyId": 217182083,
      "TradeId": 1431730956,
      "TransactionId": 0,
      "OrderBusinessId": "1431729662",
      "OrderId": 1431729719,
      "OrderMongoId": "5b739d8363419cdee89395c9",
      "DisplayOffline": "",
      "Delete": "",
      "AssociatorId": 0
    }
此时需要取对应的OrderMongoId和TradeId的值,此时利用jmeter中的正则表达式获取一组数据,然后借助Jmeter中的后置处理器BeanShellPostProcessor编写shell脚本来实现。

正则实现如下:

关于正则表达式,以下几点需要说明下:
(1)正则表达式中()是要提取的数据,可以是一个,也可以是多个,提取多个的时候,中间可以使用[.\s\S]+?表示中间的任何字符。若正则表达式中使用jmeter变量,则按照jmeter正常调用变量格式调用即可,如:data-id="\\${getAwardId}">[\S\s]+?<input type="checkbox" value="(.+?)"
(2)模板:$1$对应第一个括号内的内容,$2$对应第2个括号内的内容...,但是$0$对应的所有的内容,会把数据提取出来,可以用于以后的遍历。可以使用多个模板,格式:$1$,$2$,$3$...
(3)匹配数字:正数的话:1表示匹配到组内的第一个数据,2表示匹配到组内的第2个数据,0表示随机匹配组内一个数据,-1表示匹配组内所有数据。可以匹配多个模板对应的数据,格式:3,3
(4)缺省值,没啥可说的,到目前为止一直也没有用过,以后用到了再说

具体实现脚本如下:
vars是内置对象,可以对变量进行存取操作。

//代码实现:需要根据OrderMongoId的值获取对应的TradeId的值
int tradeIdNum = 0;
int rderMongoIdNum = 0;
int i = 0;
boolean flag = false;//判定是否找到订单ID

tradeIdNum = Integer.parseInt(vars.get("getOrderInfo_matchNr"));
orderMongoIdNum = Integer.parseInt(vars.get("getOrderInfo_matchNr"));
log.info("tradeIdNum=" + tradeIdNum);
log.info("orderMongoIdNum=" + orderMongoIdNum);

String actualOrderMongoId = vars.get("getOrderMongoId");
log.info("actualOrderMongoId=" + actualOrderMongoId);

//遍历获取actualOrderMongoId对应的tradeId
for(i=1;i<=tradeIdNum;i++){
    for(int j=1;j<=orderMongoIdNum;j++){
        if(i==j){//对应的数据才比较,否则则不比较
    String forEachOrderMongoId = vars.get("getOrderInfo_" + j.toString() + "_g2");
if(forEachOrderMongoId.equals(actualOrderMongoId)){
log.info("i=" + i);
log.info(vars.get("getOrderInfo_" + i.toString() + "_g1"));
log.info(vars.get("getOrderInfo_" + i.toString() + "_g2"));
flag = true;
break;
}
}
    }
    //若是匹配到对应的值,则退出循环
    if(flag){
break;
    }
}

String payTradeId = vars.get("getOrderInfo_" + i.toString() + "_g1");
vars.put("planPayTradeId",payTradeId);

写的不是太好,可能不能看明白,别人写的一个挺明了的,可以参考:https://www.cnblogs.com/fengpingfan/p/4755411.html

下面是正则表达式返回数据的一部分(供以后自己用哈):
getOrderInfo_1="TradeId": 1435556176,
      "TransactionId": 0,
      "OrderBusinessId": "1435556175",
      "OrderId": 1435567440,
      "OrderMongoId": "5b7a550c63419b97186a8d56"
getOrderInfo_1_g=2
getOrderInfo_1_g0="TradeId": 1435556176,
      "TransactionId": 0,
      "OrderBusinessId": "1435556175",
      "OrderId": 1435567440,
      "OrderMongoId": "5b7a550c63419b97186a8d56"
getOrderInfo_1_g1=1435556176
getOrderInfo_1_g2=5b7a550c63419b97186a8d56
getOrderInfo_2="TradeId": 1435556036,
      "TransactionId": 0,
      "OrderBusinessId": "1435556035",
      "OrderId": 1435559553,
      "OrderMongoId": "5b7a52da6341984fe43dc5ff"
getOrderInfo_2_g=2
getOrderInfo_2_g0="TradeId": 1435556036,
      "TransactionId": 0,
      "OrderBusinessId": "1435556035",
      "OrderId": 1435559553,
      "OrderMongoId": "5b7a52da6341984fe43dc5ff"
getOrderInfo_2_g1=1435556036
getOrderInfo_2_g2=5b7a52da6341984fe43dc5ff
getOrderInfo_matchNr=2


//

TAG:

 

评分:0

我来说两句

Open Toolbar