断言值与正文中的字段不匹配
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 的 。
我在 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 的