Java 在jmeter中使用Beanshell验证JSON响应
我试图使用Beanshell断言在jmeter中断言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
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把它捡起来就足够了)
展望未来,我建议使用不同的方法,如:
{
"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断言中解决此问题的示例吗?如果我稍微更新了我的答案以包含一个示例,请查看此示例。我还建议大家熟悉这篇文章