我需要在beanshell采样器中比较json响应,并在条件通过或失败时进行打印。有人可以帮忙吗,我们该如何比较呢? 我已经有一个json格式的响应,执行测试时我会得到另一个响应,我需要将这两个单词逐个单词进行比较。
I tried using if/else but then its not working properly.
JSONObject JsonResponseinput = new JSONObject();
JsonResponseinput.toString();
print(JsonResponseinput + " = PASS");
f.close();
String s=JsonResponseinput.toString();
if (s == JsonResponse)
{
f = new FileOutputStream("output/path/API_OUTPUT.csv", true);
p = new PrintStream(f);
this.interpreter.setOut(p);
print(s + " = PASS");
f.close();
}
Else
{
print(JsonResponseinput + " = FAIL")
}
答案 0 :(得分:1)
您可以使用以下方法比较2个JSON响应:
使用JSR223采样器处理脚本区域中的代码
String response1 = vars.get("jsonOutput1");
String response2 = vars.get("jsonOutput2");
if (response1.equals(response2)) {
log.info("Responses are equal");
}
else {
log.info("Responses are not equal");
}
答案 1 :(得分:1)
至少有四种方法可以做到这一点:
使用Jackson,例如:
final JSONObject obj1 = /*json*/;
final JSONObject obj2 = /*json*/;
final ObjectMapper mapper = new ObjectMapper();
final JsonNode tree1 = mapper.readTree(obj1.toString());
final JsonNode tree2 = mapper.readTree(obj2.toString());
if (tree1.equals(tree2)) {
log.info('PASS');
}
else {
log.info('FAIL')
}
使用GSON,例如:
JsonParser parser = new JsonParser();
JsonElement o1 = parser.parse("{a : {a : 2}, b : 2}");
JsonElement o2 = parser.parse("{b : 2, a : {a : 2}}");
assertEquals(o1, o2);
使用JsonSlurper,例如:
def json1 = new groovy.json.JsonSlurper().parseText("json1")
def json2 = new groovy.json.JsonSlurper().parseText("json2")
if (json1 == json2) {
log.info('PASS')
} else {
log.info('FAIL')
}
像使用JSONAssert
try {
org.skyscreamer.jsonassert.JSONAssert.assertEquals("json1", "json2", false)
println('PASS')
}
catch (Exception ex) {
println('FAIL')
}
更多信息:The Easiest Way To Compare REST API Responses Using JMeter
P.S。忘记Beanshell了,since JMeter 3.1 you should be using JSR223 Test Elements and Groovy language不用任何形式的脚本
答案 2 :(得分:0)
我使用DeltaXML中的一个名为DeltaJSON的工具进行JSON比较,其中有一个简洁的GUI和REST界面。您可以使用REST API并解析响应。