繁体   English   中英

在jmeter中使用Beanshell验证JSON响应

[英]Validating JSON Response using Beanshell in jmeter

我试图使用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方法时出错:eval源文件:内联评估:``import org.json.JSONObject; 导入org.json.JSONArray; 导入java.lang.String; '':类型变量声明:类:在命名空间中找不到JsonObject

我正在使用jmeter 2.11版本。 谁能帮助我让脚本正常运行,并且我的代码正确吗?

我建议您改用JsonPath ,它确实在做您想做的事。

另外,升级到已经将该库嵌入其类路径中的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";
}

如果您确实想采用这种方式,则需要确保在JMeter Classpath中的某个位置有相关的JSON库 (通常将jar放到JMeter的“ lib”文件夹中,然后重新启动JMeter进行拾取就足够了)


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

  1. 通过JMeter插件可以使用JSON路径声明 ,您可以直接在其中使用JSON路径查询。 您可以通过JMeter插件管理器安装JSON路径声明

    JSON插件JMeter插件管理器

  2. 切换到JSR223断言Groovy语言。 Groovy具有内置的JSON支持,因此您不需要任何额外的库。 例如,如果您具有以下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) 

    Groovy JSON示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM