RestAssured接口测试:如何正确计算列表长度与获取max值
RestAssured API测试:正确获取列表长度与max值的问题解决
嘿,我来帮你搞定这个问题!首先咱们先明确你的API返回的JSON结构——它外层是一个数组,数组里只有一个对象,这个对象包含max和list两个字段:
[{"max":"20","list":[ {"id":1120,"sId":1120,"sIntId":"150","type":1}, {"id":1121,"sId":1121,"sIntId":"151","type":1}, {"id":1122,"sId":1122,"sIntId":"152","type":1}, {"id":1123,"sId":1123,"sIntId":"153","type":1}, {"id":1124,"sId":1124,"sIntId":"154","type":1}]}]
你当前代码的问题出在没有考虑外层的数组结构,直接用路径取值,导致拿到的是数组层面的结果,而非数组内第一个对象的字段值。
问题分析
- list数量错误:你用
res.body().path("list.size()")时,RestAssured会遍历数组里的每个元素,取它们的list.size(),因为数组只有1个元素,所以返回1;但你实际要的是这个元素里的list的长度(也就是5)。 - max值带数组括号:
res.body().jsonPath().get("max")会返回数组中所有元素的max字段组成的列表,所以得到[20];你需要的是数组第一个元素的max值。
修正后的测试代码
@Test public void getData() throws IOException { Response res = given() .header("authToken", userToken) .when() .get("/students") .then() .contentType(ContentType.JSON) .extract() .response(); // 获取list的长度:先定位到数组第一个元素,再取list的size int listSize = res.body().path("[0].list.size()"); System.out.println("Number of list : " + listSize); // 获取max值:定位到数组第一个元素的max字段 String maxValue = res.body().jsonPath().getString("[0].max"); System.out.println("max : " + maxValue); }
关键修改点
- 路径前添加
[0]:用来指定数组的第一个元素(因为你的响应数组只有这一个元素),这样就能精准定位到包含max和list的对象。 - 对于
max值,使用getString("[0].max")直接获取字符串类型的max值,避免返回数组格式。
这样修改后,就能得到你预期的输出:
Number of list : 5
max : 20
内容的提问来源于stack exchange,提问作者Sunil
相关产品推荐
相关产品推荐

