Jmeter:在BeanShell Prepocessor中解析JSON响应并将其存储在变量中

时间:2016-08-10 04:35:18

标签: json jmeter beanshell

Jmeter:如何提取&使用BeanShell预处理器将accountID存储在响应变量中?我们可以使用JSON或正则表达式。

我的回复看起来像是什么:

    {
   "address":{
      "street1":"6550 Vallejo Street",
      "street2":"",
      "city":"Emeryville",
      "state":"CA",
      "zipcode":"98456",
      "country":"Uk"
   },
   "timezone":"US/Pacific-New",
   "reference":"fe_qa001",
   "token":"ns7h4rqVZegSZG6yZls6",
   "login":"fe_qa001@qa.com",
   "accountId":-9223372036762408565,
   "firstName":"qa029",
   "lastName":"svcqa",
   "email":"fe_qa001@qa.com",
   "component":[
      {
         "type":1,
         "reference":"12-1",
         "version":"1",
         "base":"Plastic",
         "zipcode":"94556",
         "bedsize":"high",
         "bed":false,
         "componentId":0,
         "code":"P5",
         "sku":"abcd",
         "serial":"1234",
         "purchaseDate":1372723200000,
         "chamber":2
      }
   ]
}

我是Jmeter的新手。所以任何人都可以帮助我。该要求就像从下面给出的响应中确定帐户ID,并使用BeanShell预处理器将其存储在变量中。

1 个答案:

答案 0 :(得分:4)

我不知道你在哪里获得这段代码,但看起来它正在使用minimal-json库并以奇怪的方式使用它,所以

  1. 确保minimal-json.jar位于JMeter类路径
  2. 您已重新启动JMeter以选择.jar
  3. 您拥有所有必要的导入
  4. 此外,您的代码似乎无法正常使用minimal-json-0.9.4.jar,您应该将其修改为:

    import com.eclipsesource.json.JsonObject;
    
    String jsonString = prev.getResponseDataAsString(); 
    JsonObject accountId = JsonObject.readFrom(jsonString);
    vars.put("accountId_BSH",String.valueOf(accountId.getLong("accountId",0L)));
    

    您可以使用JSR223 PostProcessor and Groovy language轻松完成同样的工作。 Groovy内置了JSON支持,因此您不必添加任何.jars。参考Groovy代码:

    import groovy.json.JsonSlurper
    
    def jsonSlurper = new JsonSlurper();
    def response = jsonSlurper.parseText(prev.getResponseDataAsString());
    vars.put("accountId_BSH", response.accountId.toString());
    

    最好的方法是使用自JSON Path PostProcessor以来可用的JMeter 3.0。相关配置将类似于:

    • 变量名称:accountId_BSH
    • JSON路径表达式:$.accountId

    JSON Path Post