CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Java 生态与工具链/课时/REST Assured
RawBlame
课时目录12 节

Java 生态与工具链

  1. 01Java 生态地图
  2. 02数据库访问
  3. 03Hibernate 深入
  4. 04EBean ORM
  5. 05日志框架
  6. 06Javadoc 与文档
  7. 07Play Framework
  8. 08Javalin 微框架
  9. 09REST Assured
  10. 10JMeter 性能测试
  11. 11Java 加密基础
  12. 12综合练习

REST Assured

rest-assured;API 测试 DSL。

30 分钟

REST Assured

JUnit 断言 statusCode() 可读性差;REST Assured 提供 Given-When-Then DSL,让 HTTP 测试像写英语句子。本课为 jev-javalin / spring-boot-essentials 的 Controller 测试打样,并衔接 java-core-essentials 的 JUnit 5。

学习目标

  • 用 REST Assured 发送 GET/POST 并断言状态码、Header 与 JSON body
  • 提取 JSON 字段做链式断言与后续步骤参数化
  • 在 Spring Boot 测试中启动随机端口并复用 @LocalServerPort

基本 DSL

import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;

@Test
void shouldReturnBookWhenExists() {
    given()
        .baseUri("http://localhost:7000")
        .pathParam("isbn", "978-0134685991")
    .when()
        .get("/api/books/{isbn}")
    .then()
        .statusCode(200)
        .body("isbn", equalTo("978-0134685991"))
        .body("title", not(emptyString()));
}

Given 设上下文,When 发请求,Then 断言——与 BDD 场景一致。

JSON 与 Hamcrest 匹配

given()
    .contentType("application/json")
    .body("""
        {"isbn":"978-0321356680","title":"Effective Java"}
        """)
.when()
    .post("/api/books")
.then()
    .statusCode(201)
    .body("id", greaterThan(0));

复杂结构可用 jsonPath():

String title = get("/api/books")
    .then()
    .extract()
    .jsonPath()
    .getString("find { it.isbn == '978-0134685991' }.title");

Spring Boot 集成测试

@SpringBootTest(webEnvironment = RANDOM_PORT)
class BookApiIT {
    @LocalServerPort
    int port;

    @BeforeEach
    void baseUri() {
        RestAssured.port = port;
    }

    @Test
    void createAndFetch() {
        String isbn = "978-0134685991";
        given().body(Map.of("isbn", isbn, "title", "Clean Code"))
            .contentType(JSON)
        .when()
            .post("/api/books")
        .then()
            .statusCode(201);

        get("/api/books/{isbn}", isbn)
            .then()
            .body("title", equalTo("Clean Code"));
    }
}

无需启动 Postman;CI 里 mvn test 即可回归 API。

与 MockMvc 对比

REST AssuredMockMvc
是否真 HTTP可打真实端口模拟 DispatcherServlet
可读性BDD 风格高链式 .andExpect
跨语言仅 Java仅 Java
测外部服务✅ baseUri 指向任意 URL❌ 需 WireMock

练习

  • 为 jev-javalin 的 Book API 写 3 个 REST Assured 测试(200/404/201)
  • 用 extract().path("id") 把 POST 返回的 id 用于后续 GET
  • 在 Spring Boot 项目里加 @SpringBootTest 集成测试,跑通 mvn test

小结

REST Assured 让 API 测试像写规格说明;与 JUnit 5 组合是 Java 后端的标准姿势。 下一课用 JMeter 从「功能正确」走到「性能可接受」。

加载本节练习…
← 上一课Javalin 微框架下一课 →JMeter 性能测试