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


相关文章
|
7月前
|
JSON 数据格式
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
533 4
极简了解GET、POST、DELETE、PUT区别
极简了解GET、POST、DELETE、PUT区别
161 0
|
1月前
|
XML 缓存 安全
PUT 请求和 POST 请求有什么区别?
【10月更文挑战第25天】PUT请求和POST请求在HTTP协议中有着不同的功能和应用场景,开发者需要根据具体的业务需求和资源操作的性质来选择合适的请求方法,以确保客户端与服务器之间的交互准确、安全且符合预期。
|
7月前
|
存储 缓存 JSON
详解HTTP四种请求:POST、GET、DELETE、PUT
【4月更文挑战第3天】
27643 2
详解HTTP四种请求:POST、GET、DELETE、PUT
get和post的区别
`GET` 和 `POST` 是 HTTP 请求方法,常用于客户端(如浏览器)与服务器之间的通信。
|
7月前
|
API
webclient在delete请求时携带request body
webclient在delete请求时携带request body
127 0
|
Web App开发
JavaWeb - HTTP 请求中 Post 和 Put 区别
JavaWeb - HTTP 请求中 Post 和 Put 区别
250 0
|
缓存 安全 数据安全/隐私保护
基本的 HTTP 方法GET、POST、PUT 和 DELETE
HTTP 中有四种基本方法:GET、POST、PUT 和 DELETE。大部分时间我们都使用 GET。它用于任何安全的事情,不会引起任何副作用。GET 能够被添加书签、缓存、链接到代理服务器并通过代理服务器传递。这是一个非常强大的操作,一个非常有用的操作。
421 0
|
缓存 安全 网络协议
PUT和POST的区别
PUT 和 POST 是 HTTP 协议中两种常用的请求方法。它们有些相似之处,但也有一些重要的区别。在本文中,我们将详细介绍 PUT 和 POST 的区别。
|
前端开发 数据库
浅谈Ajax请求中的GET,POST,PUT,DELETE,PATCH,OPTIONS
浅谈Ajax请求中的GET,POST,PUT,DELETE,PATCH,OPTIONS 在日常的前后端交互,数据请求中最长用的就是Ajax,当然在面试时也经常会被问道请求的方式有哪些?分别什么不同?一般我们都会回答GET请求和POST请求,但其实在后端配置接口时,请求方式不仅这两种,还会有PUT,DELETE,PATCH等,当然我们在开发的时候偶尔也会遇到接口要求使用这几种方式进行请求,下面我们就来讲一讲这几种方式分别有什么不同。 首先先要了解http定义与服务器进行交互的方式,其中基本的有GET,POST,PUT,DELETE,PATCH是后增的方式。同时还要知道URL代表的是 统一资源
浅谈Ajax请求中的GET,POST,PUT,DELETE,PATCH,OPTIONS

热门文章

最新文章