我试图使用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; import org.json.JSONArray;进口 java.lang.String中; 。 。 。 '':类型变量声明:类: 在命名空间
中找不到JsonObject
我使用的是jmeter版本2.11
。任何人都可以帮助我让我的脚本正常工作,我的代码是否正确?
答案 0 :(得分:1)
我建议您改用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";
}
答案 1 :(得分:1)
如果你真的想这样做,你需要确保relevant JSON library位于JMeter Classpath的某个地方(通常只需将jar放到JMeter的“lib”文件夹并重启JMeter即可它)
展望未来我建议使用不同的方法,如:
通过JSON Path Assertion可以JMeter Plugins,您可以直接在那里使用您的JSON路径查询。您可以通过JMeter Plugins Manager
安装JSON Path Assertion切换为JSR223 Assertion和Groovy语言。 Groovy有built-in JSON support所以你不需要任何额外的库。例如,如果您有以下JSON响应:
{
"items": [
{
"CM_NAME": "foo"
},
{
"CM_NAME": "bar"
},
{
"CM_NAME": "baz"
}
]
}
您需要使用以下Groovy代码提取baz
值:
def response = SampleResult.getResponseDataAsString()
def json = new groovy.json.JsonSlurper().parseText(response)
log.info(json.items[2].CM_NAME)