如何比较json响应?

时间:2019-08-23 08:27:28

标签: json jmeter beanshell

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

}

3 个答案:

答案 0 :(得分:1)

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

  1. 使用JSON提取器提取两个JSON响应[提取完整的响应]
  2. 使用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");
    }
    

enter image description here enter image description here

答案 1 :(得分: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')
    }
    
  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不用任何形式的脚本

答案 2 :(得分:0)

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