如何使用RestAssured筛选符合条件的JSON格式用户数据
Java实现提取指定头发颜色用户数据方案
以下方案针对API自动化测试场景设计,用新手友好的技术栈实现,代码可以直接运行:
- 技术选型:用
RestAssured发送HTTP请求,用Jackson完成JSON和Java对象的自动转换,不需要手动逐层解析JSON节点,出错概率低。
第一步:引入依赖
如果是Maven项目,在pom.xml中添加以下依赖即可:
<dependencies> <!-- 用于发送REST请求的测试组件 --> <dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <version>5.3.2</version> <scope>test</scope> </dependency> <!-- 用于JSON和Java对象转换的组件 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency> </dependencies>
第二步:定义匹配响应结构的POJO类
接口返回的是嵌套JSON结构,不需要把所有返回字段都写到Java类里,Jackson会自动忽略Java类中没有定义的字段,只写你需要用到的属性即可:
- 最外层响应类,对应返回结构中的根节点
import java.util.List; public class UserResponse { private List<User> users; public List<User> getUsers() { return users; } public void setUsers(List<User> users) { this.users = users; } }
- 头发属性类,对应嵌套的
hair节点
public class Hair { private String color; private String type; public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getType() { return type; } public void setType(String type) { this.type = type; } }
- 用户信息类,对应用户对象节点,可按需增减字段
public class User { private Integer id; private String firstName; private String lastName; private Hair hair; // 用IDE一键生成getter/setter即可 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Hair getHair() { return hair; } public void setHair(Hair hair) { this.hair = hair; } }
第三步:编写测试逻辑,请求接口并过滤目标数据
代码逻辑很简单:发送GET请求拿到响应,自动转成Java对象,再过滤出头发颜色为Black的用户即可:
import io.restassured.RestAssured; import org.junit.jupiter.api.Test; import java.util.List; import static io.restassured.RestAssured.given; public class UserTest { @Test public void filterBlackHairUsers() { // 配置接口基础地址 RestAssured.baseURI = "https://dummyjson.com"; // 发送请求并把响应自动映射为定义好的Java对象 UserResponse response = given() .when() .get("/users") .then() .statusCode(200) // 先校验接口返回状态码正常 .extract() .as(UserResponse.class); // 过滤出所有头发颜色为Black的用户 List<User> blackHairUsers = response.getUsers() .stream() .filter(user -> "Black".equals(user.getHair().getColor())) .toList(); // 后续可以直接对blackHairUsers做断言,比如打印结果验证 blackHairUsers.forEach(user -> System.out.printf("用户ID:%d,姓名:%s %s,头发颜色:%s%n", user.getId(), user.getFirstName(), user.getLastName(), user.getHair().getColor())); } }
注意事项
- 过滤条件里固定值
"Black"写在equals前面,是为了避免个别用户数据缺失hair字段时触发空指针异常。 - 如果你不想定义POJO,也可以直接用JsonPath按路径提取字段,但自动化测试场景下定义POJO的方式后续做字段断言更方便,也不容易写错JSON路径。
- 拿到过滤后的用户列表后,可以直接加测试断言,比如校验黑发用户数量、用户属性是否符合预期,满足自动化测试的校验需求。
内容的提问来源于stack exchange,提问作者Saurabh
相关产品推荐
相关产品推荐

