You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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}]}]

你当前代码的问题出在没有考虑外层的数组结构,直接用路径取值,导致拿到的是数组层面的结果,而非数组内第一个对象的字段值。

问题分析

  1. list数量错误:你用res.body().path("list.size()")时,RestAssured会遍历数组里的每个元素,取它们的list.size(),因为数组只有1个元素,所以返回1;但你实际要的是这个元素里的list的长度(也就是5)。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:34:15