利器 | 接口自动化测试框架 RESTAssured 实践(三):对 Response 结果导出

news2024/11/20 1:34:36

上一篇文章中介绍了rest-assured对返回结果的断言,最后说明了对于Response结果导出的需求。可查看往期文章进行查看。

HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Mon, 13 Jan 2020 02:15:11 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Expires: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
X-XSS-Protection: 1; mode=block
Pragma: no-cache
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Proxy-Connection: keep-alive

{
    "code": 1,
    "msg": null,
    "data": {
        "tenant_id": 6,
        "userType": "1",
        "dept_id": 0,
        "user_id": 6,
        "username": "xxx",
        "jti": "afeb93f8-e4e4-4c15-955b-90cee130c4c7",
        "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.exxxzciLCJjbGllbnRfaWQiOiJzeXN0ZW0iLCJ1c2VybmFtZSI6InFpbnpoZW4ifQ.6NQmjJp_9XSveOaATNLjtTktWe6_WjHY0o9NbBUdDx8",
        "expires_in": 9999999,
        "token_type": "bearer"
        }
        ...
 }

@Test
void login(){
     .. .
     when()
             .log().all().post("http://47.xxx.xxx.133/auth/oauth/token").
     then()
             .log().all().statusCode(200).body("code",equalTo(1))
     .extract().path("data.user_id");
     System.out.println("返回id的值是:"+id);
 }

运行结果:

extract().asString()
有时候我们可能需要获取ResponseBody中的多个值,例如我们现在想要获取返回体body中的dept_id和user_id,我们就可以利用extract().asString()先将响应结果以json字符串的形式保存下来,再一一根据需要获取,具体写法如下:

@Test
void login(){
     .. .
     when()
             .log().all().post("http://47.xxx.xxx.133/auth/oauth/token").
     then()
             .log().all().statusCode(200).body("code",equalTo(1))
     .extract().asString();
     System.out.println("返回body的值是:"+json);
     System.out.println("获取user_id的值是:"+ from(json).get("data.user_id"));
     System.out.println("获取dept_id的值是:"+ from(json).get("data.dept_id"));
 }

运行结果:

962×147 5.68 KB

extract().response()
上面都是对响应体的结果进行导出,但是实际工作中我们的需求远不止于此,我们可能还需要响应头等信息,例如一些接口的Token、就可能会在响应信息的Header中返回;
这个时候就可以利用extract().response()来讲所有的response信息都保存成一个Response对象:

@Test
void login(){
     .. .
     when()
             .log().all().post("http://47.xxx.xxx.133/auth/oauth/token").
     then()
             .log().all().statusCode(200).body("code",equalTo(1))
     .extract().response();
   System.out.println("返回response是:"+response);
 } 

运行结果:

然后在利用各种Response.get方法来获取。
1)获取所有的Headers

@Test
void login(){
     .. .
     when()
             .log().all().post("http://47.xxx.xxx.133/auth/oauth/token").
     then()
             .log().all().statusCode(200).body("code",equalTo(1))
     .extract().response();
   System.out.println("返回headers是:\n"+response.getHeaders());
 }

运行结果:

2)获取某一个header值
类似key,value的结构,使用getHeader(“headerName”)即可,例如我们这里要获取Content-type的值:

@Test
void login(){
     .. .
     when()
             .log().all().post("http://47.xxx.xxx.133/auth/oauth/token").
     then()
             .log().all().statusCode(200).body("code",equalTo(1))
     .extract().response();
   System.out.println("返回Content-Type是:\n"+response.getHeader("Content-Type"));
 }

运行结果:

3)获取status line——getStatusLine()

@Test
void login(){
     .. .
     when()
             .log().all().post("http://47.xxx.xxx.133/auth/oauth/token").
     then()
             .log().all().statusCode(200).body("code",equalTo(1))
     .extract().response();
   System.out.println("返回StatusLine是:\n"+response.getStatusLine());
 }

运行结果:

4)获取status code——getStatusCode()

@Test
void login(){
     .. .
     when()
             .log().all().post("http://47.xxx.xxx.133/auth/oauth/token").
     then()
             .log().all().statusCode(200).body("code",equalTo(1))
     .extract().response();
   System.out.println("返回StatusCode是:\n"+response.getStatusCode());
 }

运行结果:

5)获取cookies——getCookies()、getCookie(“cookieName”)
rest-assured还为我们提供了方便的获取cookie的方法;因本例中无cookies返回,所以仅展示代码语法,有需要的可自行测试或参考官方文档

// Get all cookies as simple name-value pairs
Map<String, String> allCookies = response.getCookies();
// Get a single cookie value:
String cookieValue = response.getCookie("cookieName");

上述这些已几乎可满足日常工作所需,如有需要可在官网进一步研究,官网还提供了获取同名多值的header和cookie等方法:

相关参考链接:
RESTAssured 官方文档:
Usage · rest-assured/rest-assured Wiki · GitHub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/110666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

产险精算GLM案例

这是对北美产险精算学会CAS北美产险精算师考试教材《广义线性模型实践者指南》的第一章中的实例的结果验证&#xff0c;教材中使用的是纯数学理论推导&#xff0c;这里使用python进行结果验证。 原始数据是一个简单的分组数据&#xff1a; 这个原始数据表需要进行结构化后&…

前端基础(十七)_HTML5新特性

HTML5新特性 1、在网页上绘制图形的canvas元素 原生JavaScriptcanvas实现五子棋游戏_值得一看 鼠标移动淡入淡出Canvas小球效果_TS版本 JS配合canvas实现贪吃蛇小游戏 canvas基础及太极图案例 2、多媒体相关video和audio元素 html5 video 音频标签: audio 标签 在IE8及更早版本…

LVGL学习笔记1 - 准备

目录 1. 下载LVGL源代码 2. 平台 3. 导入到工程 3.1 配置头文件 3.2 src文件夹 4. 移植 4.1 显示接口部分 4.1.1 disp_init 4.1.2 lv_port_disp_init 4.1.3 disp_flush 4.2 IPA部分 4.2.1 lv_draw_gd32_ipa_init 4.2.2 lv_draw_gd32_ipa_blend_fill 4.2.3 lv_dra…

Web API节点操作

1、节点概述 网页中的所有内容都是节点&#xff08;标签、属性、文本、注释等&#xff09;&#xff0c;在DOM 中&#xff0c;节点使用 node 来表示。HTML DOM 树中的所有节点均可通过 JavaScript 进行访问&#xff0c;所有 HTML 元素&#xff08;节点&#xff09;均可被修改&a…

(JavaP1177 )【模板】快速排序

【模板】快速排序 一、题目描述 利用快速排序算法将读入的 NNN 个数从小到大排序后输出。 快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料&#xff0c;掌握后独立完成。&#xff08;C 选手请不要试图使用 STL&#xff0c;虽然你…

认识信道(零):天线的极化

认识信道(零)&#xff1a;天线的极化 文章目录认识信道(零)&#xff1a;天线的极化零.简述一.平面电磁波的传播二.对于field pattern的研究三.对于传播路程的研究四.极化失配五.传播结果六.QuaDRiGa Tutorial分析TXV-RXVTX45-RXV和 TXV-RX45TX45-RX45TX90-RX0&#xff0c;45&am…

[Linux]-Crontab定时任务

[Linux]-Crontab定时任务 森格 | 2022年12月 本文是对Linux中的定时任务Crontab的介绍 一、Crontab是什么 crontab命令常见于Unix和类Unix的操作系统之中&#xff0c;用于设置周期性被执行的指令。该命令从标准输入设备读取指令&#xff0c;并将其存放于“crontab”文件中&…

APP登录界面设计:注册框 or 登录框,哪个更合理?

登录和注册过程往往是产品和用户的 First Sight&#xff0c;因此登录注册入口是给用户留下好的第一印象的关键。遵循“所有的设计都应有据可循”的原则&#xff0c;下面是我司设计团队对“登录界面该放注册框还是登录框这个问题”的探讨。 对于一般需要账号体系的产品&#xff…

Moho Pro - Mac 上一款专业的二维动画制作软件,强大的功能让你尽情发挥创意

Moho Pro - Mac 上一款专业的二维动画制作软件&#xff0c;强大的功能让你尽情发挥创意 Moho&#xff0c;以前被称为动画工作室专业版&#xff0c;是最好的质量的2D动画软件之一。这个程序是理想的专业人士寻找一个更有效的替代方法来创建动画&#xff0c;没有繁琐的详细逐帧处…

[ 漏洞挖掘基础篇六 ] 漏洞挖掘之越权漏洞挖掘

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

用Echarts实现SpreadJS引用从属关系可视化

在金融行业&#xff0c;我们经常会有审计审查的需求&#xff0c;对某个计算结果进行审查&#xff0c;但是这个计算结果可能依赖多个单元格&#xff0c;而且会有会有多级依赖的情况&#xff0c;如果让我们的从业人员靠眼睛找&#xff0c;工作量巨大&#xff0c;而且准确性存疑&a…

图书管理系统【Servlet+HTML综合应用】

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

分享从零开始学习网络设备配置--任务2.7 提高网络稳定性(VRRP)

任务描述 某公司在北京的总部网络承担了连接全国各地分公司网络的任务。总部网络中心采用多台万兆交换机&#xff0c;内部网络按照业务规划有2个部门VLAN。为了增强总部核心网络的稳定性&#xff0c;要求在三层网络设备上配置VRRP备份组&#xff0c;实现网关冗余&#xff0c;为…

BYOL论文精读

文章目录概要背景方法1. 概述2. 参数更新3.目标z_ξ的构建和q_θ的预测结果结论个人看法概要 本篇博客介绍了Bootstrap Your Own Latent (BYOL)方法&#xff0c;这是DeepMind和Imperial London提出的一种自监督学习方法。 BYOL 包含两个架构相同但参数不同的网络。BYOL 不需要…

SpringBoot 项目打成 .exe 程序

准备 准备工作&#xff1a; 1.一个jar包&#xff0c;没有bug能正常启动的jar包 2.exe4j&#xff0c;一个将jar转换成exe的工具 3.inno setup&#xff0c;一个将依赖和exe一起打成一个安装程序的工具 开始 以我为例子&#xff0c;我将jar包放在了桌面 打开安装好的exe4j 直…

面渣逆袭:Java并发六十问,快来看看你会多少道

这篇文章有点长&#xff0c;四万字&#xff0c;图文详解六十道Java并发面试题。人已经肝麻了&#xff0c;大家可以点赞、收藏慢慢看&#xff01;扶我起来&#xff0c;我还能肝&#xff01; 基础 1.并行跟并发有什么区别&#xff1f; 从操作系统的角度来看&#xff0c;线程是…

现在有哪些好用的企业报表软件?

简单来讲&#xff0c;企业报表就是“用表格、图表等格式来动态显示数据”&#xff0c;各行各业、每年每月&#xff0c;都需要通过报表来展示组织和人员在经营管理上的真实情况。当前大家常用的实现企业报表的方式包含代码开发、用 Excel 制作离线报表、开源产品、利用业务系统&…

基于遗传编程的符号回归

0 前言 作为一种监督学习方法&#xff0c;符号回归&#xff08;symbolic regression&#xff09;试图发现某种隐藏的数学公式&#xff0c;以此利用特征变量预测目标变量。 符号回归的具体实现方式是遗传算法&#xff08;genetic algorithm&#xff09;。一开始&#xff0c;一…

数字三角形问题

数字三角形问题一、题目描述二、题目分析1、问题分析2、思路分析&#xff08;1&#xff09;状态转移方程状态表示状态转移&#xff08;2&#xff09;循环的设计三、代码实现一、题目描述 二、题目分析 1、问题分析 这道题给我们的第一眼感觉就是情况太多了&#xff0c;太复杂…

虚拟化环境下,如何高效开展勒索病毒防护加固?

本文重点 近些年&#xff0c;勒索病毒攻击事件频发&#xff0c;由于其“难发现、难阻止、难破解”的特点&#xff0c;不少用户——尤其是使用虚拟化的金融、医疗、制造、公共服务等重要行业用户——已遭受严重数据与经济损失。勒索攻击的防控是一项系统性工程&#xff0c;除了…