断言值与正文中的字段不匹配

Assertion value not matching for a field in body

我在 RestAssured 中进行 POC 时点击了 google 地点搜索 API。

以下是我收到的回复。我正在写一个断言来匹配 'location' 下的 'lat' 的值。

我试过的断言如下-

body("obj.candidates[0].geometry.location.lat",equalTo("-33.8599358"));

{
    "candidates": [
        {
            "formatted_address": "140 George St, The Rocks NSW 2000, Australia",
            "geometry": {
                "location": {
                    "lat": -33.8599358,
                    "lng": 151.2090295
                },
                "viewport": {
                    "northeast": {
                        "lat": -33.85824767010727,
                        "lng": 151.2102470798928
                    },
                    "southwest": {
                        "lat": -33.86094732989272,
                        "lng": 151.2075474201073
                    }
                }
            },
            "name": "Museum of Contemporary Art Australia",
            "opening_hours": {
                "open_now": false
            },
            "photos": [
                {
                    "height": 2736,
                    "html_attributions": [
                        "<a href=\"https://maps.google.com/maps/contrib/108440264878062594882/photos\">Kun-Lin Tsou</a>"
                    ],
                    "photo_reference": "CmRaAAAA1K9W8-AwTJ953e-cj2DdF0bhf5uVpnHcmBoSF4Cz5rlEjkODupFUCeGuim6Ryx4j0-jKU-jnpYch1xWV4UfWxbZZhzoXBuY8opP9gVZ_Z03mMyPa71lzYRAf5gAWX4bpEhAcia7kO56eCSu6x7IRSTTBGhTQK4-BGWyFhpvUZESi3axcejZP_Q",
                    "width": 3648
                }
            ],
            "rating": 4.4
        }
    ],
    "status": "OK"
}

但是当我 运行 程序 -

时出现如下错误

线程中出现异常 "main" java.lang.AssertionError:1 预期失败。 JSON 路径 obj.candidates[0].geometry.location.lat 不匹配。 预期:-33.8599358 实际:空

当我 运行 使用邮递员发出请求时,我得到了如上所述的有效响应以及针对它的有效数据。我不明白为什么在检查断言时它会根据实际结果字段获得 'Null' 值。

谁能帮我找出这里的问题?

您可以在响应中使用 jsonpath 访问该字段:

assertThat(response.jsonpath().get("candidates[0].geometry.location.lat"), equalTo("-33.8599358"));

如果您遇到反序列化异常,请将 jackson-databind 放入您的 pom.xml。

您收到该异常是因为您的响应中没有名为 obj 的字段。只需从路径表达式中删除 obj 并使用 candidates[0].geometry.location.lat

从表面上看,我相信您是在尝试使用 obj 来引用 json 负载的 "root"。如果是这样,那么知道你不需要。在 REST-assured 中,路径表达式总是 relative 无论如何到根。但是为了以防万一,您 可以 在 REST-assured 中使用 restAssuredJsonRootObject 引用 json 的根,尽管这不是 public .查看来自 REST-assured 的创始人和作者 Johan 的