Java 在jmeter中使用Beanshell验证JSON响应

Java 在jmeter中使用Beanshell验证JSON响应,java,json,jmeter,beanshell,Java,Json,Jmeter,Beanshell,我试图使用Beanshell断言在jmeter中断言Json响应。下面是我的代码 import org.json.JSONObject; import org.json.JSONArray; import java.lang.String; import org.apache.log.Logger; try{ String jsonString = prev.getResponseDataAsString(); JsonObject jsonobj = JsonObject.readF

我试图使用Beanshell断言在jmeter中断言Json响应。下面是我的代码

import org.json.JSONObject;
import org.json.JSONArray;
import java.lang.String;
import org.apache.log.Logger;

try{
  String jsonString = prev.getResponseDataAsString();
  JsonObject jsonobj = JsonObject.readFrom(jsonString);
  JsonArray jsonarr = jsonobj.get("items").asArray();
  String pickup = jsonarr.get(2).asObject().get("CM_NAME").asString();
  log.info(pickup); 
 }
catch(Exception e)
{
 log.info("beanshell Exception "+e.getMessage());
}
下面是我必须验证的Json路径

$.items[2].CM_NAME
运行脚本后,我得到以下脚本

断言失败消息:org.apache.jorphan.util.JMeterException: 调用bsh方法时出错:评估源文件:内联评估: ``导入org.json.JSONObject;导入org.json.JSONArray;进口 java.lang.String;…'':类型化变量声明:类: 在命名空间中找不到JsonObject


我使用的是jmeter版本
2.11
。有人能帮我让脚本正常工作吗?我的代码正确吗?

我建议你改用它,这正是你想要做的

另外,升级到JMeter 3.1,它已经将这个库嵌入到它的类路径中,或者下载JAR文件并将其放在/lib/ext中

完整代码示例:

import com.jayway.jsonpath.JsonPath;

String author0 = JsonPath.read(document, "$.store.book[0].author");
Failure = !"John Smith".equals(author0);
if (Failure) {
  FailureMessage = "Expected John Smith as author";
}

如果你真的想这样做,你需要确保你在某个地方拥有这个jar(通常把jar放到JMeter的“lib”文件夹中,然后重启JMeter把它捡起来就足够了)


展望未来,我建议使用不同的方法,如:

  • 有一个可用的via,您可以直接在那里使用JSON路径查询。您可以通过以下方式安装JSON路径断言:

  • 切换到和语言。Groovy提供了一个新的库,因此您不需要任何额外的库。例如,如果您有以下JSON响应:

    {
      "items": [
        {
          "CM_NAME": "foo"
        },
        {
          "CM_NAME": "bar"
        },
        {
          "CM_NAME": "baz"
        }
      ]
    }
    
    您需要提取
    baz
    值,您可以使用以下Groovy代码:

    def response = SampleResult.getResponseDataAsString()
    def json = new groovy.json.JsonSlurper().parseText(response)
    
    log.info(json.items[2].CM_NAME)
    


  • 是否有可能使用beanshell断言来实现它。当然,使用库从响应中提取要检查的内容,然后检查如下条件:if(!condition)issucess=false;您还可以帮助我导入(因为我使用的是2.11版本),我们可以在上面的示例或代码中使用,而且JsonPath是一个Jar,我必须从maven repository()下载,将其放入lib/ext并重新启动JMeter。我已经从存储库下载了jar文件。重新启动了JMeter并将上述导入包含在beanshell断言中。但我仍然收到了这个错误------org.apache.jorphan.util.JMeterException:调用bsh方法时出错:eval源文件:内联求值:``import org.json.JSONObject;导入org.json.JSONArray;导入java.lang.String;…'':类型化变量声明:未定义参数:document我是jmeter的新手,所以您能告诉我或给我一个关于如何在JSR223断言中解决此问题的示例吗?如果我稍微更新了我的答案以包含一个示例,请查看此示例。我还建议大家熟悉这篇文章