如何比较 json 个响应?

How to compare json responses?

我需要比较 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")

}

您可以使用以下方式比较 2 JSON 响应:

  1. 使用 JSON 提取器提取 JSON 响应 [提取完整响应]
  2. 使用JSR223 Sampler处理Script区的代码

    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");
    }
    

至少有 4 种方法:

  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')
    }
    
  2. 使用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); 
    
  3. 使用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')
    }
    
  4. 使用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 任何形式的脚本

我使用 DeltaXML 中名为 DeltaJSON 的工具进行 JSON 比较,它有一个简洁的 GUI 和 REST 界面。您可以使用 REST API 并解析响应。