首页 > 解决方案 > 如何比较json响应?

问题描述

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

}

标签: jsonjmeterbeanshell

解决方案


至少有 4 种方法可以做到这一点:

  1. 使用杰克逊像:

    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')
    }
    

更多信息:使用 JMeter 比较 REST API 响应的最简单方法

PS 忘记 Beanshell,从 JMeter 3.1 开始,您应该使用 JSR223 测试元素和 Groovy 语言来编写任何形式的脚本


推荐阅读