接口自动化测试利器,使用Rest Assured进行REST API测试

我们在做接口测试时,一般在代码中会使用HttpClient,但是HttpClient相对来讲还是比较麻烦的,代码量也相对较多,对于新手而言上手会比较难一点,今天我们来看下另一个接口测试工具包REST Assured

REST Assured是一个流行的Java库,用于测试RESTful Web服务。它提供了简单但强大的DSL(域特定语言)来验证REST服务的行为。

它完全支持所有REST方法,如GET、PUT、POST、PATCH等,可以说是接口自动化测试的利器。

引入 Rest Assured 依赖

<dependency><groupId>io.rest-assured</groupId><artifactId>rest-assured</artifactId><version>5.4.0</version><scope>test</scope>
</dependency>

编写Rest API测试

1.引入rest-assured依赖

2.编写代码

import io.restassured.RestAssured;
import io.restassured.http.Method;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;/*** @author 作者:测试工程师成长之路* @version 创建时间:2023/12/24* 类说明:Rest Assured 示例代码*/
public class RestAssuredAPITest {@Testpublic void GetBooksDetails() {// 指定请求的url RestAssured.baseURI = "https://127.0.0.1/TesterRoad/Books";// 获取要发送到服务器的请求的RequestSpecification RequestSpecification httpRequest = RestAssured.given();// 指定请求类型和请求报文Response response = httpRequest.request(Method.GET, "");// 输出接口响应报文和状态System.out.println("Status received => " + response.getStatusLine());System.out.println("Response=>" + response.prettyPrint());}
}

相关 API 说明

RestAssured.baseURI = "https://127.0.0.1/TesterRoad/Books";

上面的代码使用RestAssured类来设置一个基本URI。

在本例中,基本URI是https://127.0.0.1/TesterRoad/Books。

RequestSpecification httpRequest = RestAssured.given();

获取要发送到服务器的请求的RequestSpecification,Rest Assured库为此提供了一个名为RequestSpecification的接口。

变量httpRequest存储请求,以便我们可以在需要时修改它,例如添加身份验证,添加头等。

Response response = httpRequest.request(Method.GET, "");

调用服务器来使用RequestSpecification对象获取资源,上面的代码使用request方法向服务器发送对资源的请求。

request方法有两个参数,第一个是HTTP请求方法,第二个是字符串。字符串参数用于指定要与基URI一起发送的参数。在本例中,因为不需要任何参数,因此为空字符串。

请求方法的返回类型是Response对象,这意味着请求方法从服务器获取响应。

System.out.println("Status received => " + response.getStatusLine()); 
System.out.println("Response=>" + response.prettyPrint());

在上面的代码中,我们只是将响应作为字符串读取并将其打印到控制台。我们使用Response接口的getBody方法来返回响应的实际主体,然后将其打印到控制台。

我们还可以使用Rest Assured提供的简写方法来重构上述测试代码。

import io.restassured.RestAssured;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import org.junit.Test;/*** @author 作者:测试工程师成长之路* @version 创建时间:2023/12/24* 类说明:Rest Assured 示例代码*/
public class RestAssuredAPITest {@Testpublic void GetBooksDetails() {// 指定请求的urlRestAssured.baseURI = "https://demoqa.com/BookStore/v1/Books";// 获取要发送到服务器的请求的RequestSpecificationRequestSpecification httpRequest = RestAssured.given();// 指定请求类型和请求报文Response response = httpRequest.get("");// 输出接口响应报文和状态System.out.println("Response Body is =>  " + response.asString());}
}

断言响应状态码和获取响应头信息

1.验证HTTP响应状态码

int statusCode = response.getStatusCode();
System.out.println("statusCode => "+statusCode);
// 断言HTTP响应状态
Assert.assertEquals(statusCode , 200);

上述代码将返回值statusCode与预期值(即200)进行断言

在这里插入图片描述

2.获取头信息

// 获取HTTP响应头
Headers allHeaders = response.headers();
for(Header header : allHeaders) {System.out.println("Key: " + header.getName() + ",Value: " + header.getValue());
}

在上面的代码中,我们访问了所有的头信息,然后通过遍历Headers集合来提取单个头。

图片

3.获取指定的头信息

// 获取指定的头信息,如 Content-Type
String contentType = response.header("Content-Type");
System.out.println("Content-Type => " + contentType);
// 输出
Content-Type => application/json; charset=utf-8

上述代码使用header(String arg0)方法来获取特定的header。

使用JsonPath处理响应报文

图片

上图为接口响应报文

// books节点是一个数组
// 使用 JsonPath 获取指定字段,此处用于获取第一个pages
JsonPath jsonPath = response.jsonPath();
System.out.println("books第一个节点的pages => "+jsonPath.get("books[0].pages"));
// 输出
books第一个节点的pages => 234

全部代码

1.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>rest-assured</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>io.rest-assured</groupId><artifactId>rest-assured</artifactId><version>5.4.0</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/junit/junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies>
</project>

2.示例代码

import io.restassured.RestAssured;
import io.restassured.http.Header;
import io.restassured.http.Headers;
import io.restassured.path.json.JsonPath;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import org.junit.Assert;
import org.junit.Test;/*** @author 作者:测试工程师成长之路* @version 创建时间:2023/12/24* 类说明:Rest Assured 示例代码*/
public class RestAssuredAPITest {@Testpublic void GetBooksDetails() {// 指定请求的urlRestAssured.baseURI = "https://127.0.0.1/TesterRoad/Books";// 获取要发送到服务器的请求的RequestSpecificationRequestSpecification httpRequest = RestAssured.given();// 指定请求类型和请求报文Response response = httpRequest.get("");// 输出接口响应报文和状态System.out.println("Response Body =>  " + response.asString());int statusCode = response.getStatusCode();System.out.println("statusCode => "+statusCode);// 断言HTTP响应状态Assert.assertEquals(statusCode , 200);// 获取HTTP响应头Headers allHeaders = response.headers();for(Header header : allHeaders) {System.out.println("Key: " + header.getName() + ",Value: " + header.getValue());}// 获取指定的头信息,如 Content-TypeString contentType = response.header("Content-Type");System.out.println("Content-Type => " + contentType);// books节点是一个数组// 使用 JsonPath 获取指定字段,此处用于获取第一个pagesJsonPath jsonPath = response.jsonPath();System.out.println("books第一个节点的pages => "+jsonPath.get("books[0].pages"));}
}

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

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

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

相关文章

麒麟V10安装Redis6.2.6

1、下载redis安装包 Redis各版本下载&#xff1a;https://download.redis.io/releases/ 2、将下载后的.tar.gz压缩包上传到到服务器自定义文件夹下 3、 解压文件 tar -zxvf redis-6.2.6.tar.gzmv redis-6.2.6 redis4、安装redis 在redis文件夹下输入make指令 cd /opt/redi…

MoCo 算法阅读记录

论文地址&#xff1a;&#x1f430; 何凯明大神之作&#xff0c;通过无监督对比学习预训练Image Encoder的表征能力。后也被许多VLP算法作为ITC的底层算法来使用。 一方面由于源代码本身并不复杂&#xff0c;但是要求多GPU分布式训练&#xff0c;以及需要下载ImageNet这个大规模…

Ubuntu 20.04.06 PCL C++学习记录(二十一)【切记使用rm * -rf前先确认是否是对应文件夹】

[TOC]PCL中点云分割模块的学习 学习背景 参考书籍&#xff1a;《点云库PCL从入门到精通》以及官方代码PCL官方代码链接,&#xff0c;PCL版本为1.10.0&#xff0c;CMake版本为3.16&#xff0c;测试点云下载地址 学习内容 根据欧几里得距离和需要保持的用户可自定义条件对点进…

【分析 GClog 的吞吐量和停顿时间、heapdump 内存泄漏分析】

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容GClog分析以优化吞吐量和停顿时间步骤1: 收集GClog步骤2: 分析GClog步骤3: 优化建议步骤4: 实施优化 Heapdump内存泄漏分析步骤1: 获取Heapdump步骤2: 分析Heapdump步骤3: 定位泄漏对象步骤4: 分析泄漏原因步骤5: 修复泄漏…

预训练的启蒙:浅谈BERT、RoBERTa、ALBERT、T5

文章目录 Transformer揭开预训练序幕为什么RNN/LSTM需要从头训练&#xff1f; BERT核心特点预训练任务架构应用和影响 RoBERTa改进点BERT和RoBERTa的MASK策略对比BERT的静态MASK策略RoBERTa的动态MASK策略效果 总结 ALBERT改进点参数共享因式分解嵌入参数和LoRa对比 总结 T5核心…

Electron打包vue+java+nginx 踩坑记录

记录下遇到的问题&#xff1a; ⚠注意&#xff1a;64位系统和32位系统的配置不太一样 1、运行npm run packager失败 原因&#xff1a;在package.json没有对应命令 解决&#xff1a;在package.json 中添加对应命令&#xff0c;其中testApp是你想要的输入的项目名称&#xff0…

element用户上传头像组件带大图预览,和删除功能

element 用户上传组件不支持大图预览&#xff0c;拿组件的简单修改一些&#xff0c;发表上来主要是记一下&#xff0c;以后可以用 效果图 <template><div class"flex-img"><div class"el-upload-list el-upload-list--picture-card" v-sh…

word从零基础到高手【办公】

第1课 - word基础操作快速入门第2课 - 让你效率10倍提升的快捷操作第3课 - word排版快速入门第4课 - 排版实战案例讲解第5课 - 搞定论文排版全过程第6课 - 让你的word更强大的神技第7课 - 提高工作效率必备的批量操作 资料截图如下: 发送: "word办公" 获取提取码

动态规划-入门理解

一、什么情况可以使用动态规划 动态规划 最优子结构 重叠子问题 转移方程 最优子结构&#xff1a;保证能从局部解推出全局解&#xff0c;也就是保证能够写出转移方程 重叠子问题&#xff1a;说明暴力解法太耗时&#xff0c;我们可以使用动态规划进行优化 转移方程&#xff…

基于GAN的图像补全实战

数据与代码地址见文末 论文地址:http://iizuka.cs.tsukuba.ac.jp/projects/completion/data/completion_sig2017.pdf 1.概述 图像补全,即补全图像中的覆盖和缺失部分, 网络整体结构如下图所示,整体网络结构还是采取GAN,对于生成器,网络结构采取Unet的形式,首先使用卷积…

rac数据库默认网关不通导致集群异常

集群CSSD进程reconfiguration完成&#xff0c;显示2个节点都在线。但ora.net1.network服务启动失败&#xff0c;且有依赖关系的资源随后启动失败并且已经达到上限。 查看两个节点的网络信息&#xff0c;发现两个节点的默认网关是不一致的。 修改故障节点网关 在RAC中&#xff0…

基于springboot+vue+Mysql的职称评审管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

在线人数统计功能怎么实现?

一、前言 大家好&#xff01;我是sum墨&#xff0c;一个一线的底层码农&#xff0c;平时喜欢研究和思考一些技术相关的问题并整理成文&#xff0c;限于本人水平&#xff0c;如果文章和代码有表述不当之处&#xff0c;还请不吝赐教。 在线人数统计这个功能相信大家一眼就明白是…

基于奇异值分解(Singular Value Decomposition,SVD)的信号去噪算法

01.基于奇异值分解(SVD)去噪原理 奇异值分解&#xff08;Singular Value Decomposition, SVD&#xff09;是线性代数中一种重要的矩阵分解方法&#xff0c;它可以用于信号处理、图像去噪、数据压缩等多种应用。在图像去噪的过程中&#xff0c;SVD可以用来分离图像中的信号和噪…

Transformer详解和知识点总结

目录 1. 注意力机制1.1 注意力评分函数1.2 多头注意力&#xff08;Multi-head self-attention&#xff09; 2. Layer norm3. 模型结构4. Attention在Transformer中三种形式的应用 论文&#xff1a;https://arxiv.org/abs/1706.03762 李沐B站视频&#xff1a;https://www.bilibi…

SpringBoot Starter子模块下无法生成spring-configuration-metadata.json文件

一.SpringBoot Starter的作用 Starter的机制极大的方便了业务系统接入相关能力&#xff0c;它有一个非常友好的能力就是引入starter后&#xff0c;在配置相关的配置项时&#xff0c;能自动提示&#xff0c;极大的提升了使用的友好度。 二.遇到的问题 我在为Juggle开发系统star…

CLI举例:上下行连接路由器(路由引流)

CLI举例&#xff1a;上下行连接路由器&#xff08;路由引流&#xff09; 介绍了集群设备&#xff0c;上下行连接路由器的配置举例。 组网需求 如图1所示&#xff0c;上行网络使用BGP&#xff0c;下行网络使用OSPF&#xff0c;多数据中心统一通过路由器R4接入Internet。 希望…

HarmonyOS 开发-多模态页面转场动效实现案例

介绍 本示例介绍多模态页面转场动效实现&#xff1a;通过半模态转场实现半模态登录界面&#xff0c;通过配置NavDestinationMode类型为DIALOG&#xff0c;实现半模态的背景为透明&#xff0c;再与全屏模态和组件转场结合实现多模态组合登录场景&#xff0c;其中手机验证码登录…

从零开始为香橙派orangepi zero 3移植主线linux——2.kernel + rootfs

从零开始为香橙派orangepi zero 3移植主线linux——2.kernel rootfs 参考文章&#xff1a;一、linux kernel移植二、根文件系统2.1 buildroot构建1.修改toolchain下的交叉编译链2.修改系统配置3.去除内置kernel和uboot编译4.添加rootfs.tar格式的输出 2.2 ubuntu-base移植 三、…

Linux gcc day4 权限

首先来看比如ls、pwd等究竟是什么呢&#xff1f; 那ls是如何在shell中执行起来的呢&#xff1f;shell命令又是什么呢&#xff1f; shell命令&#xff1a;命令行解释器&#xff1a;表现&#xff1a;你看到的命令行提示符&#xff0c;以及可以输入指令并且可以执行&#xff08;是…