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

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.dtcms.com/a/358923.html

相关文章:

  • 数据结构 | 深度解析二叉树的基本原理
  • 访问Nginx 前端页面,接口报502 Bad Gateway
  • 【DeepSeek】ubuntu安装deepseek、docker、ragflow
  • 简历书写---自我评价怎么写
  • Day18_【机器学习—交叉验证与网格搜索】
  • Unity核心概念①
  • 【Linux】基础I/O和文件系统
  • PHP单独使用phinx使用数据库迁移
  • 全栈开源,高效赋能——启英泰伦新官网升级上线!
  • 快速学习和掌握Jackson 、Gson、Fastjson
  • React Native基本用法
  • 大语言模型生成的“超龄劳动者权益保障制度系统化完善建议(修订版)”
  • 下一波红利:用 #AI编程 闯入小游戏赛道,#看广告变现 模式正在崛起!
  • I2C的类比水池和大海
  • 【前端教程】DOM 操作入门专栏:从基础到实战
  • JS之刷刷
  • Langflow核心技术学习笔记(新)
  • LangChain.js 实战与原理:用 LCEL 构建可维护的 RAG / Agent 系统(含 4 套 30+ 行代码)
  • 揭开智能体架构面纱:90% 属软件工程,10% 为 AI 技术
  • Python数据分析:在Python中,reindex和set_index以及reset_index最本质的区别是什么?
  • B树与B+树的原理区别应用
  • Python 的 argparse 模块中,add_argument 方法的 nargs 参数
  • Ubuntu系统下交叉编译Android的X264库
  • hello算法笔记 01
  • Jedis、Lettuce、Redisson 技术选型对比
  • 下载 | Win11 23H2正式版最新原版ISO系统映像 (22631.5840、多合一版本)-修复系统问题
  • LangGraph 深度解析(二):掌握 LangGraph 函数式 API 的状态化 AI 工作流
  • openEuler2403安装部署Redis8
  • JavaScript之性能优化
  • HiFi-GAN模型代码分析