【问题标题】:Rest Assured: java.lang.AssertionError: JSON path body doesn't match放心:java.lang.AssertionError:JSON 路径正文不匹配
【发布时间】:2015-08-04 08:09:58
【问题描述】:

以下是我点击 url 时得到的 JSON 响应:

{"status":"success","body":[{"id":1,"name":"ALL"},{"id":2,"name":"VW_CMPNY"},{"id":3,"name":"EDT_CMPNY"},{"id":4,"name":"ADD_CMPNY"},{"id":5,"name":"DLT_CMPNY"},{"id":6,"name":"VW_GRP"},{"id":7,"name":"EDT_GRP"},{"id":8,"name":"ADD_GRP"},{"id":9,"name":"DLT_GRP"},{"id":10,"name":"VW_ACCNT"},{"id":11,"name":"EDT_ACCNT"},{"id":12,"name":"ADD_ACCNT"},{"id":13,"name":"DLT_ACCNT"},{"id":14,"name":"VW_INVC"},{"id":15,"name":"EDT_INVC"},{"id":16,"name":"ADD_INVC"},{"id":17,"name":"DLT_INVC"},{"id":18,"name":"ON_RCRD"},{"id":19,"name":"OFF_RCRD"}]}

我正在检查 JSON 响应是否等于我拥有的 .json 文件;这是我的代码:

URI permissionsUri = new URI(permissionsUrl);
JSONParser jsonParser = new JSONParser();
Object obj = jsonParser.parse(new FileReader("\\db\\seed\\permission.json));
JSONArray expectedJson = (JSONArray) obj;
String expectedStatus = "success";
get(permissionsUri).then().assertThat().body("status", equalTo(expectedStatus)).and().body("body", equalTo(expectedJson));

但我收到以下错误:

java.lang.AssertionError: JSON path body doesn't match. Expected: <[{"id":1,"name":"ALL"},{"id":2,"name":"VW_CMPNY"},{"id":3,"name":"EDT_CMPNY"},{"id":4,"name":"ADD_CMPNY"},{"id":5,"name":"DLT_CMPNY"},{"id":6,"name":"VW_GRP"},{"id":7,"name":"EDT_GRP"},{"id":8,"name":"ADD_GRP"},{"id":9,"name":"DLT_GRP"},{"id":10,"name":"VW_ACCNT"},{"id":11,"name":"EDT_ACCNT"},{"id":12,"name":"ADD_ACCNT"},{"id":13,"name":"DLT_ACCNT"},{"id":14,"name":"VW_INVC"},{"id":15,"name":"EDT_INVC"},{"id":16,"name":"ADD_INVC"},{"id":17,"name":"DLT_INVC"},{"id":18,"name":"ON_RCRD"},{"id":19,"name":"OFF_RCRD"}]> Actual: [{id=1, name=ALL}, {id=2, name=VW_CMPNY}, {id=3, name=EDT_CMPNY}, {id=4, name=ADD_CMPNY}, {id=5, name=DLT_CMPNY}, {id=6, name=VW_GRP}, {id=7, name=EDT_GRP}, {id=8, name=ADD_GRP}, {id=9, name=DLT_GRP}, {id=10, name=VW_ACCNT}, {id=11, name=EDT_ACCNT}, {id=12, name=ADD_ACCNT}, {id=13, name=DLT_ACCNT}, {id=14, name=VW_INVC}, {id=15, name=EDT_INVC}, {id=16, name=ADD_INVC}, {id=17, name=DLT_INVC}, {id=18, name=ON_RCRD}, {id=19, name=OFF_RCRD}]

我不知道为什么要用= 代替:。我该如何解决这个问题?

【问题讨论】:

    标签: java json rest rest-assured


    【解决方案1】:

    当我需要将响应值与 restAssurd 进行比较时,我执行以下操作并且它有效:

     Response response = given()
            .given().header("Content-Language", "en_US")
            .contentType("application/json")
    
            .body(ApiBody)
            .when()
            .post(baseApiUrl);
    JsonPath jp = new JsonPath(response.asString());
    log.info(response.asString());
    String value = jp.get("valueToCheck").toString();
    Assert.assertEquals(valueToCheckFromResponseJson, actualValue, "Value from API doesn't match Value from DB");
    

    【讨论】:

      【解决方案2】:

      “实际”部分看起来像对集合或数组的 toString 调用。您正在将 JSONArray 类的内容与实际的 JSON 文档进行比较。您必须先将 JSONArray 序列化为 JSON 文档,然后再将其与您的服务响应进行比较。

      【讨论】:

        猜你喜欢
        • 2017-11-14
        • 1970-01-01
        • 1970-01-01
        • 2018-09-11
        • 1970-01-01
        • 1970-01-01
        • 2016-02-09
        • 2020-09-30
        • 1970-01-01
        相关资源
        最近更新 更多