获取响应数据详解
REST-assured 提供了全面的方法来获取接口响应信息,包括响应时间、状态码和头字段值。以下是一个完整的示例:
java
// 发送POST请求并获取响应对象
Response res =
given().
contentType("application/x-www-form-urlencoded"). // 设置请求内容类型
body(jsonData). // 设置请求体数据
when().
post("http://httpbin.org/post"). // 发送POST请求
then().
extract().response(); // 提取完整响应
// 获取接口响应状态码(如200, 404, 500等)
int statusCode = res.getStatusCode();
System.out.println("响应状态码: " + statusCode);
// 获取接口响应时间(单位:毫秒)
long responseTime = res.time();
System.out.println("响应时间: " + responseTime + "ms");
// 获取特定响应头字段值
String contentType = res.getHeader("Content-Type");
System.out.println("Content-Type: " + contentType);
响应体数据解析详解
REST-assured 集成了强大的 GPath 解析器,可以灵活处理各种格式的响应数据:
1. GPath 概述
GPath 是一种路径表达式语言,类似于 XPath,但功能更加强大。它支持:
- 嵌套数据结构导航
- 条件筛选
- 属性访问
- 适用于多种数据格式(JSON/XML/HTML)
2. 不同格式的解析方法
处理JSON数据
java
// 获取嵌套JSON字段值
String value = res.jsonPath().get("root.items[0].name");
// 示例:获取用户列表第一个用户的姓名
String firstName = res.jsonPath().get("users[0].name");
处理XML数据
java
// 获取XML节点值
String xmlValue = res.xmlPath().get("catalog.book[0].title");
// 示例:获取图书列表第一本书的价格
String bookPrice = res.xmlPath().get("books.book[0].price");
处理HTML数据
java
// 获取HTML元素内容
String htmlContent = res.htmlPath().get("html.body.div[0].p");
// 示例:获取页面标题
String pageTitle = res.htmlPath().get("html.head.title");
3. GPath 表达式语法详解
1. 绝对路径写法
java
// 直接按层级访问
String value = res.jsonPath().get("user.address.city");
2. 索引定位
java
// 访问数组中的特定元素
String firstItem = res.jsonPath().get("items[0].name");
String lastItem = res.jsonPath().get("items[-1].name"); // 最后一个元素
3. 条件筛选
java
// 查找单个匹配项
String target = res.jsonPath().get("products.find{it.id == 123}.name");
// 查找所有匹配项
List<String> allMatches = res.jsonPath().get("products.findAll{it.price > 100}.name");
// 示例:查找状态为"active"的所有用户
List<String> activeUsers = res.jsonPath().get("users.findAll{it.status == 'active'}.username");
4. 属性选择定位(XML/HTML专用)
java
// 获取元素的属性值
String id = res.xmlPath().get("book.@id"); // XML示例
String href = res.htmlPath().get("a.@href"); // HTML示例
// 示例:获取所有链接的href属性
List<String> links = res.htmlPath().get("a.@href");
4. 实用技巧
- 使用
getString()
方法确保返回字符串类型 - 对于可能不存在的路径,使用
getOrDefault()
方法提供默认值 - 复杂查询可以组合多个GPath表达式
java
// 组合使用示例
List<String> expensiveActiveProducts = res.jsonPath().get(
"products.findAll{it.price > 100 && it.status == 'active'}.name"
);