Rest Assured调用Google Places API时实际值为null,Postman显示有值
问题排查与修复方案
嘿,我一眼就发现了几个关键问题,这正是你断言失败的根源:
1. Location参数丢失负号
你在Postman里的请求坐标是-33.8670522,151.1957362(悉尼附近区域),但Rest Assured代码里写的是:
.param("location", "33.8670522,151.1957362")
少了开头的负号!这直接导致请求的地理位置完全错误,返回的餐厅列表和Postman里的结果毫无关联,自然找不到你预期的results[0].geometry.viewport.northeast.lat值,所以断言时拿到null。
2. 缺少keyword参数
Postman请求里有keyword=cruise用来过滤结果,但你的代码里完全遗漏了这个参数:
// 代码中缺失的关键过滤参数 .param("keyword", "cruise")
没有这个过滤条件,返回的第一个结果根本不是你在Postman中看到的那家餐厅,这也是断言失败的核心原因之一。
修正后的完整代码
把这两个问题修复后,代码应该是这样的:
package rest.basic.testing; import io.restassured.RestAssured; import io.restassured.http.ContentType; import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.equalTo; public class GetRequestSample { static String baseURI = "https://maps.googleapis.com"; public static void main(String[] args) { searchPlaceInGoogle(); } public static void searchPlaceInGoogle() { RestAssured.baseURI = baseURI; given() .param("location", "-33.8670522,151.1957362") // 补全坐标负号 .param("radius", "1500") .param("type", "restaurant") .param("keyword", "cruise") // 添加缺失的过滤参数 .param("key", "AIzaSyDWz5aGXygtrt3hsn99yXv_oocw09PSOHE") .when() .get("maps/api/place/nearbysearch/json") .log().all() // 建议保留,方便查看请求和响应详情 .then() .assertThat().statusCode(200) .and().contentType(ContentType.JSON) .and().body("results[0].geometry.viewport.northeast.lat", equalTo(-33.85723597010728)); // 注意用数字类型,不要加引号 System.out.println("Request is executed successful"); } }
还有个小细节:预期值-33.85723597010728是数字类型,不要用字符串包裹,否则会因为类型不匹配导致断言失败。
调试小技巧
以后遇到这类问题,可以在.get()后面加上.log().all(),这样能打印出完整的请求信息和响应体,对比Postman的请求就能快速定位差异点啦。
内容的提问来源于stack exchange,提问作者Merlin
相关产品推荐
相关产品推荐

