[英]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进行拾取就足够了)
展望未来,我建议您使用不同的方法,例如:
通过JMeter插件可以使用JSON路径声明 ,您可以直接在其中使用JSON路径查询。 您可以通过JMeter插件管理器安装JSON路径声明
切换到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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.