使用REST Assured进行API自动化测试(全面指南)

作者:API传播员 · 2026-01-15 · 阅读时间:6分钟

APIs 是现代软件应用程序的核心组件,因此 自动化测试


前提条件

在开始之前,请确保您的开发环境已满足以下要求:

  • 安装 Java JDK。
  • 配置支持 Java 开发的 IDE(如 IntelliJ IDEA)。
  • 配置 Maven(IntelliJ IDEA 已内置 Maven)。
  • 安装 TestNG 测试框架。

此外,本教程提供了一个包含 GET、POST、PUT 和 DELETE 端点的后端 JAR 文件,您可以通过运行该文件来模拟 API 测试环境。


在 Maven 项目中添加依赖项

首先,您需要在 pom.xml 文件中添加以下依赖项:

  1. REST Assured:用于 API 请求和响应处理。
  2. TestNG:提供测试注解、并行执行和数据驱动测试功能。
  3. Gson:用于处理 JSON 数据和创建有效负载。

您可以访问 Maven Repository 搜索这些依赖项,并将最新的稳定版本添加到项目中。


启动后端服务

在包含 JAR 文件的目录中运行以下命令以启动后端服务:

java -jar demo-0.0.1-SNAPSHOT.jar

注意: 后端服务使用内存数据库,数据仅在服务运行期间有效。如果停止服务,所有数据将丢失,因此请在测试前准备好数据集。


REST Assured 测试用例的结构

REST Assured 测试用例通常遵循以下三部分结构:

1. 给定(Given)

设置测试的前提条件,包括指定内容类型、请求头、身份验证信息、查询参数以及请求体等。例如:

given()
    .contentType(ContentType.JSON)
    .header("Authorization", "Bearer ACCESS_TOKEN")
    .auth().basic("username", "password")
    .param("param", "value") // GET 请求的查询参数
    .body(requestBody);      // POST/PUT 请求的请求体

2. 何时(When)

定义要发出的实际 API 请求,包括 HTTP 方法(如 GET、POST、PUT、DELETE)和资源路径。例如:

when()
    .get("/endpoint"); // GET 请求

3. 然后(Then)

验证 API 响应的预期结果,包括状态码、响应体、响应头等。例如:

then()
    .statusCode(200)
    .body("responseField", equalTo("expectedValue"));

示例:实现 POST 请求的测试用例

以下是一个完整的 POST 请求测试用例示例:

导入必要的类

import static io.restassured.RestAssured.given;
import io.restassured.http.ContentType;
import io.restassured.response.Response;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.google.gson.JsonObject;

定义测试类和方法

public class SampleTestCases {

    @Test
    public void testCreateBook() {
        // 准备请求体
        JsonObject requestBody = new JsonObject();
        requestBody.addProperty("title", "Book 1");
        requestBody.addProperty("author", "Author 1");        // 发送 POST 请求
        Response response = given()
            .contentType(ContentType.JSON)
            .auth().preemptive().basic("admin", "password")
            .body(requestBody.toString())
            .when()
            .post("http://127.0.0.1:7081/api/books");        // 验证响应状态码
        int statusCode = response.getStatusCode();
        Assert.assertEquals(statusCode, 201, "Unexpected status code");        // 验证响应内容
        String responseBody = response.getBody().asString();
        Assert.assertTrue(responseBody.contains("title"), "Title not found in the response");
    }
}

避免代码冗余的最佳实践

在多个测试用例中,您可能会发现一些重复的代码,例如端点定义、有效负载创建和状态码处理。通过代码分解和模块化设计,可以有效减少冗余。

文件结构建议

以下是推荐的文件夹结构:

src
└── main
├── java
│ ├── com.api.payloads
│ ├── com.api.routes
│ ├── com.api.endpoints
│ └── com.api.testcases
└── resources
└── config.properties

示例代码

1. BookPayload.java

package com.api.payloads;

import com.google.gson.JsonObject;public class BookPayload {
    private String id;
    private String title;
    private String author;    // Getter 和 Setter 方法    public String getPayloadData() {
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("id", this.id);
        jsonObject.addProperty("title", this.title);
        jsonObject.addProperty("author", this.author);
        return jsonObject.toString();
    }
}

2. BookRoutes.java

package com.api.routes;

public class BookRoutes {
    public static String base_url = "http://localhost:7081/api";
    public static String post_url = base_url + "/books";
    public static String get_url = base_url + "/books";
    public static String update_url = base_url + "/books/{id}";
    public static String delete_url = base_url + "/books/{id}";
}

3. BookEndpoints.java

package com.api.endpoints;

import com.api.payloads.BookPayload;
import com.api.routes.BookRoutes;
import io.restassured.response.Response;import static io.restassured.RestAssured.given;public class BookEndpoints {    public static Response createBook(BookPayload payload, String username, String password) {
        return given()
            .contentType("application/json")
            .auth().basic(username, password)
            .body(payload.getPayloadData())
            .post(BookRoutes.post_url);
    }    // 其他方法省略...
}

总结

通过本指南,您学习了如何使用 REST Assured 和 TestNG 进行 API 自动化测试,包括:

  • 配置开发环境并添加必要依赖项。
  • 使用 REST Assured 的 Given-When-Then 结构编写测试用例。
  • 验证常见 HTTP 方法(GET、POST、PUT、DELETE)的 API 测试。
  • 通过模块化设计优化代码结构,减少冗余。

REST Assured 是一个功能强大的工具,结合 TestNG 框架可以显著提升 API 测试的效率和可维护性。希望本教程能为您的 API 测试之旅提供有力支持!


参考资料

  1. REST Assured 官方文档
  2. Maven Repository
  3. TestNG 官方文档
原文链接: https://blog.devgenius.io/rest-assured-for-api-automation-testing-beginners-guide-5c85aefd4980