当前位置: 首页 > web >正文

REST-assured获取响应数据详解

获取响应数据详解

REST-assured 提供了全面的方法来获取接口响应信息,包括响应时间、状态码和头字段值。以下是一个完整的示例:

// 发送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数据
// 获取嵌套JSON字段值
String value = res.jsonPath().get("root.items[0].name");// 示例:获取用户列表第一个用户的姓名
String firstName = res.jsonPath().get("users[0].name");
处理XML数据
// 获取XML节点值
String xmlValue = res.xmlPath().get("catalog.book[0].title");// 示例:获取图书列表第一本书的价格
String bookPrice = res.xmlPath().get("books.book[0].price");
处理HTML数据
// 获取HTML元素内容
String htmlContent = res.htmlPath().get("html.body.div[0].p");// 示例:获取页面标题
String pageTitle = res.htmlPath().get("html.head.title");

3. GPath 表达式语法详解

1. 绝对路径写法
// 直接按层级访问
String value = res.jsonPath().get("user.address.city");
2. 索引定位
// 访问数组中的特定元素
String firstItem = res.jsonPath().get("items[0].name");
String lastItem = res.jsonPath().get("items[-1].name"); // 最后一个元素
3. 条件筛选
// 查找单个匹配项
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专用)
// 获取元素的属性值
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表达式
// 组合使用示例
List<String> expensiveActiveProducts = res.jsonPath().get("products.findAll{it.price > 100 && it.status == 'active'}.name"
);
http://www.xdnf.cn/news/19378.html

相关文章:

  • 手写链路追踪优化-自动全局追踪代替局部手动追踪
  • 做一个实用的节假日工具
  • Java面试-spring boot框架
  • 98、23种设计模式之代理模式(7/23)
  • 【SpringMVC】SSM框架【二】——SpringMVC超详细
  • ModuleNotFoundError: No module named ‘cairosvg‘
  • 浔川社团阅读量破历史记录
  • 得物25年春招-安卓部分编程题
  • GD32入门到实战21--输入捕获
  • 【C++】日期类实现详解:代码解析与复用优化
  • C#正则表达式与用法
  • 【基础-单选】关于Tabs组件页签的位置设置,下面描述错误的是
  • 免费在线图片合成视频工具 ,完全免费
  • uni.onBLECharacteristicValueChange接收到数据,返回的value为{}的原因及其获取方法
  • 佳易王钟表维修养护管理系统:开启钟表维修高效管理新篇章​就#软件操作教程
  • Mysql 学习day 2 深入理解Mysql索引底层数据结构
  • React前端开发_Day6-Day9_极客园项目
  • C语言 - 输出参数详解:从简单示例到 alloc_chrdev_region
  • Spring AI 的应用和开发
  • 如何简单建设一个网站,让用户快速找到你。
  • 在PowerPoint和WPS演示让蝴蝶一直跳8字舞
  • Python生成免安装exe
  • SAP PP模块的MPS
  • Vue加载速度优化,verder.js和element.js加载速度慢解决方法
  • 防火墙技术(二):安全区域
  • C#调用c++ dll读取2进制文件时而正常,时而异常
  • 语义分割目前还是研究热点吗?
  • 如何快速了解项目管理基础
  • 【具身智能】【机械臂】机械臂轨迹规划项目以及资料汇总【持续更新】
  • 【物联网】MQTT / Broker / Topic 是什么?