使用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 文件中添加以下依赖项:
- REST Assured:用于 API 请求和响应处理。
- TestNG:提供测试注解、并行执行和数据驱动测试功能。
- 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 测试之旅提供有力支持!
参考资料
原文链接: https://blog.devgenius.io/rest-assured-for-api-automation-testing-beginners-guide-5c85aefd4980
热门推荐
一个账号试用1000+ API
助力AI无缝链接物理世界 · 无需多次注册
3000+提示词助力AI大模型
和专业工程师共享工作效率翻倍的秘密
最新文章
- 创建 Python API
- LangGraph 教程:初学者综合指南
- 构建自定义云存储:NAS厂商 REST API 使用指南(Synology/QNAP)
- Pix支付方式是什么?如何在巴西和荷兰使用?
- Undetectable检查AI API的使用指南
- API优先设计三原则
- Password Manager(密码管理)产品背后的API机制:OAuth、加密接口、浏览器扩展集成
- AI短剧工业革命:API如何重塑内容生产全链路
- .NET Core 3.1 WebAPI+Vue+Element UI实现文件上传
- Python与Ollama的开发案例
- 知识图谱API解析
- 如何在Excel VBA中调用REST API