REST-assured 实现 GET, POST, PUT, PATCH, DELETE 请求

简介: REST-assured 实现 GET, POST, PUT, PATCH, DELETE 请求

本文中将展示如何使用 REST Assured 框架发送 API 请求。例子中包含了 GETPOSTPUTPATCHDELETE 格式的请求。

一、REST Assured API 请求

创建一个 maven 项目 rest-assured-examples,并在 pom.xml 中添加 REST Assured 和 Junit 的依赖,如下代码所示:

<dependencies>
    <dependency>
        <groupId>io.rest-assured</groupId>
        <artifactId>rest-assured</artifactId>
        <version>5.2.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>RELEASE</version>
        <scope>test</scope>
    </dependency>
</dependencies>
复制代码

GET 请求

GET 请求是用来向服务器获取资源的。

接下来的例子将会使用 REST Assuredget() 方法实现 GET 请求。

test 包下创建一个 RestAssuredGetRequest 类,用来发送不带参数 GET 请求,代码如下:

import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import io.restassured.response.Response;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
public class RestAssuredRequest {
    @BeforeAll
    public static void setup(){
        RestAssured.baseURI = "https://jsonplaceholder.typicode.com";
    }
    @Test
    public void getRequest(){
        Response response = given()
                .contentType(ContentType.JSON)
                .when()
                .get("/posts")
                .then()
                .extract().response();
        Assertions.assertEquals(200, response.statusCode());
        Assertions.assertEquals("qui est esse", response.jsonPath().getString("title[1]"));
    }
}
复制代码

在 GET 请求中发送数据,可以使用 query() 方法,在 RestAssuredGetRequest 类中添加 getRequestWithQueryParam 方法,代码如下:

@Test
public void getRequestWithQueryParam(){
    Response response = given()
            .contentType(ContentType.JSON)
            .param("postId","2")
            .when()
            .get("/comments")
            .then()
            .extract()
            .response();
    Assertions.assertEquals(200, response.statusCode());
    Assertions.assertEquals("Meghan_Littel@rene.us",response.jsonPath().getString("email[3]"));
}
复制代码

在浏览器中访问 jsonplaceholder.typicode.com/comments?po… 页面显示结果如下:

image.png

代码 response.jsonPath().getString("email[3]" 其实就是获取第 4 个 post 中的 email 字段的内容,通过与 Assertions 中提供的期望值进行比较。

执行测试,控制台显示结果如下:

image.png

POST 请求

POST 格式请求常用于往服务端发送数据或者创建一个资源。

在 REST Assured 中发送一个 POST 请求,这里使用 post() 方法。

新创建一个 RestAssuredPostRequest 类,添加一个 requestBody 作为 POST 请求的请求体,再添加一个 postRequest 方法用于发送 POST 请求。

public class RestAssuredPostRequest {
    @BeforeAll
    public static void setup(){
        RestAssured.baseURI = "https://jsonplaceholder.typicode.com";
    }
    private static String requestBody = "{\n" +
            "  \"title\": \"foo\",\n" +
            "  \"body\": \"bar\",\n" +
            "  \"userId\": \"1\" \n}";
    @Test
    public void postRequest(){
        Response response = given()
                .header("Content-type", "application/json")
                .and()
                .body(requestBody)
                .when()
                .post("/posts")
                .then()
                .extract().response();
        Assertions.assertEquals(201, response.statusCode());
        Assertions.assertEquals("foo", response.jsonPath().getString("title"));
        Assertions.assertEquals("bar", response.jsonPath().getString("body"));
        Assertions.assertEquals("1", response.jsonPath().getString("userId"));
        Assertions.assertEquals("101", response.jsonPath().getString("id"));
    }
}
复制代码

执行测试,测试结果如下:

image.png

PUT 请求

PUT 请求用更新资源,PUT 请求要求传递一个 JSON 请求体。

REST Assured 中发送 PUT 格式请求需要使用 put() 方法。

新创建一个 RestAssuredPutRequest 类,添加一个 requestBody 作为 PUT 请求的请求体,这个 requestBody 中只包含更新的内容,再添加一个 putRequest 方法用于发送 PUT 请求。

public class RestAssuredPutRequest {
    @BeforeAll
    public static void setup(){
        RestAssured.baseURI = "https://jsonplaceholder.typicode.com";
    }
    private static String requestBody = "{\n" +
            "  \"title\": \"foo\",\n" +
            "  \"body\": \"baz\",\n" +
            "  \"userId\": \"1\",\n" +
            "  \"id\": \"1\" \n}";
    @Test
    public void putRequest(){
        Response response = given()
                .header("Content-type", "application/json")
                .and()
                .body(requestBody)
                .when()
                .put("/posts/1")
                .then()
                .extract().response();
        Assertions.assertEquals(200, response.statusCode());
        Assertions.assertEquals("foo", response.jsonPath().getString("title"));
        Assertions.assertEquals("baz", response.jsonPath().getString("body"));
        Assertions.assertEquals("1", response.jsonPath().getString("userId"));
        Assertions.assertEquals("1", response.jsonPath().getString("id"));
    }
}
复制代码

执行测试,测试结果如下图所示:

image.png

PATCH 请求

PATCH 请求也用于更新资源,但只需要有请求 body 中正在更新的字段即可。

新创建一个 RestAssuredPatchRequest 类,添加一个 requestBody 作为 Patch 请求的请求体,这个 requestBody 中只包含更新的内容即可,再添加一个 patchRequest 方法用于发送 Patch 请求。

public class RestAssuredPatchRequest {
    @BeforeAll
    public static void setup(){
        RestAssured.baseURI = "https://jsonplaceholder.typicode.com";
    }
    private static String requestBody = "{\n" +
            "  \"title\": \"bax\",\n";
    @Test
    public void putRequest(){
        Response response = given()
                .header("Content-type", "application/json")
                .and()
                .body(requestBody)
                .when()
                .patch("/posts/1")
                .then()
                .extract().response();
        Assertions.assertEquals(200, response.statusCode());
        Assertions.assertEquals("bax", response.jsonPath().getString("body"));
        Assertions.assertEquals("1", response.jsonPath().getString("userId"));
        Assertions.assertEquals("1", response.jsonPath().getString("id"));
    }
}
复制代码

执行测试用例,显示结果如下:

image.png

DELETE 请求

DELETE 请求可以删除服务端的资源。

REST Assured 中发送 DELETE 请求可以使用到 delete() 方法。

新创建一个 RestAssuredDeleteRequest 类,再添加一个 deleteRequest 方法用于发送 DELETE 请求。

public class RestAssuredDeleteRequest {
    @BeforeAll
    public static void setup(){
        RestAssured.baseURI = "https://jsonplaceholder.typicode.com";
    }
    @Test
    public void putRequest(){
        Response response = given()
                .header("Content-type", "application/json")
                .and()
                .when()
                .put("/posts/1")
                .then()
                .extract().response();
        Assertions.assertEquals(200, response.statusCode());
    }
}
复制代码

执行测试用例,显示结果如下:

image.png


相关文章
|
监控 Linux API
中断系列第四篇:中断爱养狗?
中断系列第四篇:中断爱养狗?
443 0
|
存储 关系型数据库 MySQL
mysql8对gis的支持
mysql8对gis的支持
895 0
|
2月前
|
人工智能 运维 API
Dify开发者必看:如何破解MCP集成与Prompt迭代难题?
Dify 是一个面向AI时代的开源大语言模型(LLM)应用开发平台,致力于让复杂的人工智能应用构建变得简单高效,目前已在全球范围内形成显著影响力,其 GitHub 仓库 Star 数截至 2025 年 6 月已突破 100,000+,目前,Dify 已经成为 LLMOps 领域增长最快的开源项目之一。
|
存储 Kubernetes NoSQL
k8s 学习九,pod 知识点 上
k8s 学习九,pod 知识点 上
426 0
|
6月前
|
编解码 虚拟化 Windows
Hyper分辨率调整是确保虚拟机图形表现符合期望的重要步骤,怎么调呢
在Hyper-V中调整虚拟机分辨率是确保图形表现符合预期的重要步骤。首先,通过增强会话模式调整:打开Hyper-V管理器,启用增强会话模式,启动虚拟机后在桌面右键选择“屏幕分辨率”进行设置。其次,在虚拟机内部(Windows系统)右键点击桌面空白处,选择“显示设置”,调整分辨率并应用更改。注意事项包括:确保安装Hyper-V集成服务、以管理员权限操作、注意虚拟机类型兼容性、检查显卡驱动并备份数据。这些步骤能帮助你顺利完成分辨率调整。
|
11月前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
761 102
|
人工智能 小程序 Java
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
本文介绍了一款名为PyWxDump的开源工具,它可以获取微信账户信息、解密SQLite数据库以查看和备份聊天记录。此工具适用于已登录电脑版微信的用户,通过GitHub下载后简单几步即可操作。适合对数据恢复感兴趣的开发者,但请注意合法合规使用并尊重隐私。
1516 2
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
|
Python
python导入错误(ImportError)
【5月更文挑战第2天】python导入错误(ImportError)
755 1
|
消息中间件 安全 Java
解密 Java 后台架构设计之道
【4月更文挑战第5天】本文探讨了Java后台架构设计的最佳实践,包括分层架构、微服务、异步处理与消息队列、RESTful API设计、数据库优化、安全控制、容错高可用、配置管理、CI/CD和监控日志。强调了使用微服务、Spring Boot/Spring Cloud、异步消息队列、RESTful API、安全框架Spring Security等技术的重要性,以及监控和自动化部署在确保系统稳定性和效率上的关键角色。通过这些实践,开发者能构建高效、稳定且可扩展的后台系统。
515 9
【STM32】详解RTC实时时钟的概念和配置&示例代码
【STM32】详解RTC实时时钟的概念和配置&示例代码