Java接口测试框架Restassured介绍及常用方法

 更新时间:2026年03月27日 10:34:23   作者:Yweir  
Java接口测试主要用于验证Java应用程序中不同模块或服务之间的交互是否符合预期,这篇文章主要介绍了Java接口测试框架Restassured介绍及常用方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

接口测试框架Restassured介绍

市场上的主流的接口测试框架

  • Postman:提供了类似RestAssured的功能,包括请求发送、断言和响应处理等。
  • Apache HttpClient:一个用于发送HTTP请求的Java库,提供了更底层的控制和定制化。
  • JUnit:虽然JUnit主要用于单元测试,但它可以与RestAssured等库集成,用于编写针对API接口的集成测试。
  • MockMvc:是Spring框架下的一个模拟框架,用于模拟Web请求和响应

接口测试框架【Restassured】

  • 一个基于Java的轻量级接口测试框架,主要用于简化基于HTTP协议的接口测试,简单易用、功能强大、可扩展性好
  • 官网:http://rest-assured.io
  • 优点
    • 简单易用,RestAssured提供了简单易用的API,可以轻松地编写测试代码。
    • 功能强大,支持多种请求方法、断言和验证响应内容、状态码、响应时间等特性
    • 可扩展性好,RestAssured可以与TestNG、JUnit等测试框架完美集成
    • 支持多种数据格式处理,RestAssured可以处理JSON和XML格式的数据
    • 支持结构化解析和多种解析方式,支持xpath/jsonpath/gpath等解析方式
    • 对Spring的支持比较全面,方便使用Spring框架的开发者
  • 缺点
    • 依赖性强:RestAssured依赖于Java和HTTP协议,对于非Java或非HTTP协议的接口可能不太适用
    • 需要配置测试环境:在使用RestAssured进行接口自动化测试之前,需要搭建相应的测试环境,包括服务器、数据库等。
    • 非0基础上手:虽然RestAssured提供了简单易用的API,但对于初学者来说,仍然需要一定的学习成本才能掌握。

SpringBoot3.X整合

<dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>rest-assured</artifactId>
        </dependency>
        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>rest-assured-all</artifactId>
        </dependency>
        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>spring-web-test-client</artifactId>
        </dependency>

快速开始

  • given:设置测试预设,包括请求头、请求参数、请求体、cookie等
  • when:所要执行的操作,配置发起请求的网址(GET / POST 请求)
  • then:解析结果、断言
@SpringBootTest
public class AssuredTest {
    @Test
    public void testBase() {
        RestAssured.given()
                .param("id", 1)
                .when()
                .get("http://127.0.0.1:8082/api/v1/test/detail")
                .then()
                .log()
                .all()
                .statusCode(200);
    }
}

Restassured框架常用方法

基础语法格式

  • RestAssured的语法采用简洁的链式调用方式
  • given()开始,设置测试预设,包括请求头、请求参数、请求体、cookie等;
  • 然后使用when()指定请求的URL(GET、POST等请求)
  • 最后使用then()进行断言和解析响应结果

参数配置

  • 请求头参数:使用header()方法设置请求头信息,例如“header(“Content-Type”, “application/json”)”。
  • 请求参数
    • 对于GET请求,使用“param()”方法设置URL参数,例如“param(“key”, “value”)”;
    • 对于POST请求,可以使用“body()”方法设置请求体内容
  • 文件上传
    • 提供multiPart() 的方法可以指定文件(file)、字节数组(byte-array)、输入流或者是上传文件

示例

  • GET 请求
    • log()可以向控制台输出返回的信息
    • log().all() 可以返回所有响应中的数据
 	@Test
    public void testBase() {
        RestAssured.given()
                .queryParam("id", 1)
                .when()
                .get("http://127.0.0.1:8082/api/v1/test/detail")
                .then()
                .log().all()
                .statusCode(200);
    }
  • POST方式form表单
 	@Test
    public void testPostForm(){
        RestAssured.given()
                .formParam("mail", "1320801376@sina.com")
                .formParam("pwd","123456")
                .when()
                .post("http://127.0.0.1:8082/api/v1/test/login_form")
                .then()
                .log().all()
                .statusCode(200);
    }
  • POST方式json+header
    @Test
    public void testPostJsonHeader(){
        Map<String,String> params = new HashMap<>();
        params.put("title","山海经传奇");
        RestAssured.given()
                .header("token","7a9b7dcbba2443c5a80fbfa62da63e69")
                //.header("Content-Type","application/json")
                .contentType(ContentType.JSON)
                .body(JsonUtil.obj2Json(params))
                .when()
                .post("http://127.0.0.1:8082/api/v1/test/buy")
                .then()
                .log()
                .all()
                .statusCode(200);
  • 文件上传
    @Test
    public void testFile(){
        RestAssured.given()
                .multiPart(new File("/Users/xdclass/Desktop/测试jmx/id.csv"))
                .when()
                .post("http://127.0.0.1:8082/api/v1/test/upload")
                .then()
                .log().all()
                .statusCode(200);
    }

断言与解析

响应断言

  • 使用statusCode()方法指定期望的响应状态码,例如statusCode(200)
  • 还可以使用body()方法对响应内容进行断言,例如body("key", equalTo("value"))
类型断言方法含义
状态码statusCode()响应状态码
响应头header()响应头信息
内容body()内容匹配

内置结果解析

  • 自带GPath解析
    • 是来自groovy 编程语言的广泛使用的 XML 和 JSON 解析器 GPath可以处理html、xml、json
    • 跟JSONpath的区别就是不需要从$开始写了,GPATH直接从JSON消息的第一层数据开始
    • 通过 extract().response() 将响应结果保存到 Response 类型的变量,使用Gpath提取响应中的某一个具体的数据
      • 提取JSON:res.jsonPath().get(“XXX.XXX.XXX”);
      • 提取xml:res.xmlPath().get(“XXX.XXX.XXX”);
      • 提取HTML:res.htmlPath().get(“XXX.XXX.XXX”);
  • JSON解析
    • 支持对JSON格式的响应数据进行解析,可以使用jsonPath()方法指定JSON路径进行查询和断言。
  • XML解析
    • 支持对XML格式的响应数据进行解析,可以使用xmlPath()方法指定XML路径进行查询和断言。

示例

断言测试

    @Test
    public void testAssert(){
        Map<String,String> params = new HashMap<>();
        params.put("title","山海经传奇");
        RestAssured.given()
                .header("token","7a9b7dcbba2443c5a80fbfa62da63e69")
                .header("Content-Type","application/json")
                .body(JsonUtil.obj2Json(params))
                .when()
                .post("http://127.0.0.1:8082/api/v1/test/buy")
                .then()
                .log()
                .all()
                .statusCode(200)
                .body("code", equalTo(1));
    }

结果解析

    @Test
    public void testResponse(){
        Map<String,String> params = new HashMap<>();
        params.put("title","山海经传奇");
        Response response = RestAssured.given()
                .header("token", "7a9b7dcbba2443c5a80fbfa62da63e69")
                //.header("Content-Type","application/json")
                .contentType(ContentType.JSON)
                .body(JsonUtil.obj2Json(params))
                .log().headers()//打印请求头
                .log().body()//打印请求体
                .when()
                .post("http://127.0.0.1:8082/api/v1/test/buy")
                .then()
                .log()
                .all()
                .statusCode(200).extract().response();
        Object data = response.jsonPath().get("data");
        System.out.println(data);
    }

总结 

到此这篇关于Java接口测试框架Restassured介绍及常用方法的文章就介绍到这了,更多相关Java接口测试框架Restassured内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈@RequestParam 参数是否必须传的问题

    浅谈@RequestParam 参数是否必须传的问题

    这篇文章主要介绍了浅谈@RequestParam 参数是否必须传的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • spring注解@SneakyThrows用法及说明

    spring注解@SneakyThrows用法及说明

    @SneakyThrows是Lombok提供的一个注解,用于消除显式抛出或捕获受检异常的模板代码,使用该注解后,编译器会自动生成try-catch块来捕获这些异常,从而使代码更加简洁和易读
    2025-12-12
  • RocketMQ消费幂概念与使用分析

    RocketMQ消费幂概念与使用分析

    如果有⼀个操作,多次执⾏与⼀次执⾏所产⽣的影响是相同的,我们就称这个操作是幂等的。当出现消费者对某条消息重复消费的情况时,重复消费的结果与消费⼀次的结果是相同的,并且多次消费并未对业务系统产⽣任何负⾯影响,那么这整个过程就可实现消息幂等
    2023-02-02
  • 新手学习java反射基础

    新手学习java反射基础

    Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。下面我们来一起学习一下吧
    2019-06-06
  • Java使用StopWatch输出执行耗时的方法详解

    Java使用StopWatch输出执行耗时的方法详解

    StopWatch是一个简单而强大的工具,可以帮助我们测量代码执行时间,从而优化性能,这篇文章主要介绍了Java使用StopWatch输出执行耗时的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-07-07
  • SpringBoot2 JPA解决懒加载异常的问题

    SpringBoot2 JPA解决懒加载异常的问题

    这篇文章主要介绍了SpringBoot2 JPA解决懒加载异常的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • MyBatis自定义resultMap三种映射关系示例详解

    MyBatis自定义resultMap三种映射关系示例详解

    这篇文章主要介绍了MyBatis自定义resultMap三种映射关系,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Java中的运算符有哪些详解

    Java中的运算符有哪些详解

    这篇文章主要给大家介绍了关于Java中运算符有哪些的相关资料,包括算术运算符、关系运算符、逻辑运算符、位运算符、增量运算符和自增/自减运算符,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • SpringBoot+Jersey跨域文件上传的实现示例

    SpringBoot+Jersey跨域文件上传的实现示例

    在SpringBoot开发后端服务时,我们一般是提供接口给前端使用,本文主要介绍了SpringBoot+Jersey跨域文件上传的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • 如何获取 Spring heapdump中的明文密码

    如何获取 Spring heapdump中的明文密码

    Actuator是Spring Boot提供的应用系统监控的开源框架,在攻防场景里经常会遇到Actuator配置不当的情况,攻击者可以直接下载heapdump堆转储文件,本文介绍如何获取 Spring heapdump中的密码明文,需要的朋友可以参考下
    2022-07-07

最新评论