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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Myeclipse 2016下Aptana安装教程

    Myeclipse 2016下Aptana安装教程

    这篇文章主要为大家详细介绍了Myeclipse 2016下Aptana安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 使用Java实现qq邮箱发送邮件

    使用Java实现qq邮箱发送邮件

    这篇文章主要为大家详细介绍了使用Java实现qq邮箱发送邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2010-05-05
  • Java中的Switch Case语句及示例详解

    Java中的Switch Case语句及示例详解

    Java中的SwitchCase语句用于处理多个选项,本文结合实例代码给大家介绍Java中的Switch Case语句及示例,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • java web上传文件和下载文件代码片段分享

    java web上传文件和下载文件代码片段分享

    这篇文章主要为大家详细介绍了java web上传文件和下载文件代码片段,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • APT 注解处理器实现 Lombok 常用注解功能详解

    APT 注解处理器实现 Lombok 常用注解功能详解

    这篇文章主要为大家介绍了使用APT 注解处理器实现 Lombok 常用注解功能详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 对象转Json字符串时如何忽略指定属性

    对象转Json字符串时如何忽略指定属性

    这篇文章主要介绍了对象转Json字符串时如何忽略指定属性,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 一文带你深入了解Java TreeMap

    一文带你深入了解Java TreeMap

    TreeMap是Map家族中的一员,也是用来存放key-value键值对的。平时在工作中使用的可能并不多。本文将基于jdk8对其做一个讲解,感兴趣的可以了解一下
    2022-09-09
  • SpringCloud网关Gateway架构解析

    SpringCloud网关Gateway架构解析

    这篇文章主要介绍了SpringCloud网关Gateway架构解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java面试之高级特性基础总结

    Java面试之高级特性基础总结

    这篇文章主要为大家详细介绍了10个Java高级特性基础相关的问题,也是大家面试中常常会遇到的问题。文中的示例代讲解详细,感兴趣的可以了解一下
    2023-01-01
  • Java面向对象选择题总结归纳

    Java面向对象选择题总结归纳

    今天小编就为大家分享一篇关于Java面向对象选择题总结归纳,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01

最新评论