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


相关文章
|
6月前
|
JSON 数据格式
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
491 4
|
6月前
|
网络协议 数据安全/隐私保护
get和post的区别
get和post的区别
63 0
极简了解GET、POST、DELETE、PUT区别
极简了解GET、POST、DELETE、PUT区别
146 0
|
23天前
|
XML 缓存 安全
PUT 请求和 POST 请求有什么区别?
【10月更文挑战第25天】PUT请求和POST请求在HTTP协议中有着不同的功能和应用场景,开发者需要根据具体的业务需求和资源操作的性质来选择合适的请求方法,以确保客户端与服务器之间的交互准确、安全且符合预期。
|
6月前
|
存储 缓存 JSON
详解HTTP四种请求:POST、GET、DELETE、PUT
【4月更文挑战第3天】
21823 1
详解HTTP四种请求:POST、GET、DELETE、PUT
|
6月前
|
Web App开发 缓存 网络协议
get和post的区别!
get和post的区别!
|
6月前
|
缓存 安全 数据安全/隐私保护
GET和POST有什么区别
GET和POST有什么区别
|
缓存 安全 数据安全/隐私保护
基本的 HTTP 方法GET、POST、PUT 和 DELETE
HTTP 中有四种基本方法:GET、POST、PUT 和 DELETE。大部分时间我们都使用 GET。它用于任何安全的事情,不会引起任何副作用。GET 能够被添加书签、缓存、链接到代理服务器并通过代理服务器传递。这是一个非常强大的操作,一个非常有用的操作。
392 0
|
网络协议 安全 数据安全/隐私保护
GET与POST的区别
GET与POST的区别
143 0
|
缓存 安全 网络协议
PUT和POST的区别
PUT 和 POST 是 HTTP 协议中两种常用的请求方法。它们有些相似之处,但也有一些重要的区别。在本文中,我们将详细介绍 PUT 和 POST 的区别。