当前位置: 首页 > news >正文

聊一聊Java生态接口测试常见的框架

目录

一、快速入门RestAssured + JUnit 5

1. 添加 Maven 依赖

2. 编写测试用例​​​​​​​

二、关键功能扩展

1. 参数化测试 (TestNG​​​​​​​)

2. 集成 Spring Boot (MockMvc)​​​​​​​

3. 模拟外部服务 (WireMock)​​​​​​​


在Java生态中,有几个流行的接口测试框架,比如RestAssured、JUnit、TestNG、Spring Test等。其中,RestAssured专门用于RESTful接口的测试,而JUnit和TestNG是单元测试框架,但也可以用于接口测试。Spring Test则是在Spring框架中进行集成测试的工具。

如果项目使用Spring Boot,可以考虑使用Spring Test中的`TestRestTemplate`或`WebTestClient`。

图片

如果更喜欢用纯Java代码且不想依赖太多库,可以使用Java自带的HttpURLConnection或Apache HttpClient,但需要自己封装断言。

一、快速入门RestAssured + JUnit 5

1. 添加 Maven 依赖​​​​​​​

<dependencies>    <!-- RestAssured -->    <dependency>        <groupId>io.rest-assured</groupId>        <artifactId>rest-assured</artifactId>        <version>5.3.2</version>        <scope>test</scope>    </dependency>    <!-- JUnit 5 -->    <dependency>        <groupId>org.junit.jupiter</groupId>        <artifactId>junit-jupiter</artifactId>        <version>5.9.2</version>        <scope>test</scope>    </dependency></dependencies>

2. 编写测试用例​​​​​​​

import org.junit.jupiter.api.Test;import static io.restassured.RestAssured.*;import static org.hamcrest.Matchers.*;public class ApiTest {    @Test    void testGetUser() {        given() // 请求配置            .baseUri("https://jsonplaceholder.typicode.com")            .queryParam("id", 1)        .when() // 发送请求            .get("/users")        .then() // 验证响应            .statusCode(200)            .body("name[0]", equalTo("Leanne Graham"))            .body("email[0]", containsString("@"));    }    @Test    void testPostUser() {        String jsonBody = """            {                "name": "John Doe",                "email": "john@example.com"            }            """;        given()            .baseUri("https://jsonplaceholder.typicode.com")            .header("Content-Type", "application/json")            .body(jsonBody)        .when()            .post("/users")        .then()            .statusCode(201)            .body("id", notNullValue());    }}

二、关键功能扩展

1. 参数化测试 (TestNG​​​​​​​)

import org.testng.annotations.DataProvider;import org.testng.annotations.Test;@Testpublic class DataDrivenTest {    @DataProvider    public Object[][] userData() {        return new Object[][] {            {1, "Leanne Graham"},            {2, "Ervin Howell"}        };    }    @Test(dataProvider = "userData")    void testUserById(int userId, String expectedName) {        given()            .pathParam("id", userId)        .when()            .get("https://jsonplaceholder.typicode.com/users/{id}")        .then()            .body("name", equalTo(expectedName));    }}

2. 集成 Spring Boot (MockMvc)​​​​​​​

@SpringBootTest@AutoConfigureMockMvcpublic class SpringApiTest {    @Autowired    private MockMvc mockMvc;    @Test    void testGetUser() throws Exception {        mockMvc.perform(MockMvcRequestBuilders.get("/users/1")                .accept(MediaType.APPLICATION_JSON))                .andExpect(status().isOk())                .andExpect(jsonPath("$.name").value("Leanne Graham"));    }}

3. 模拟外部服务 (WireMock)​​​​​​​

import com.github.tomakehurst.wiremock.WireMockServer;import static com.github.tomakehurst.wiremock.client.WireMock.*;@Testvoid testWithMockServer() {    WireMockServer wireMock = new WireMockServer(8089);    wireMock.start();       // 配置模拟响应    stubFor(get(urlEqualTo("/mock/user"))        .willReturn(aResponse()            .withHeader("Content-Type", "application/json")            .withBody("{\"name\": \"Mock User\"}")));    // 测试代码调用 localhost:8089/mock/user    // ... (使用 RestAssured 或 HttpClient)       wireMock.stop();}

根据项目的情况,可以采取以下方式。简单 REST 测试RestAssured + JUnit 5;Spring Boot 项目Spring Test + MockMvc;复杂测试流程TestNG + RestAssured;微服务契约测试Feign + Pact。

http://www.dtcms.com/a/277196.html

相关文章:

  • 在 Spring Boot 中使用 MyBatis 的 XML 文件编写 SQL 语句详解
  • MySQL SQL语句精要:DDL、DML与DCL的深度探究
  • Design Compiler:什么是代价函数(Cost Function)
  • HarmonyOS组件/模板集成创新活动-元服务小云体重管理引入案例(步骤条UI组件)
  • python赤道上空的大气环流剖面图(纬向-高度剖面)
  • 多级@JsonTypeInfo和@JsonSubTypes注解使用详解及场景分析
  • 剑指offer59_翻转单词顺序
  • Redis 命令总结
  • Docker三剑客
  • Docker 基于 Cgroups 实现资源限制详解【实战+源码】
  • 从一个想法到一套软件——我的AI质检平台设计蓝图
  • 03.Python 字符串中的空白字符处理
  • 【爬虫】02 - 静态页面的抓取和解析
  • HTTP与HTTPS详解
  • 面试150 填充每个节点的下一个右侧节点指针Ⅱ
  • python函数快捷的传变量地址
  • 2025江苏省信息安全管理与评估赛项二三阶段任务书
  • docker 设置代理以及配置镜像加速
  • 【C++】优先队列简介与模拟实现 + 仿函数
  • Matplotlib(一)- 数据可视化与Matplotlib
  • 关于数据库的慢查询
  • python3的可变参数如何传递元组和字典
  • 一文讲懂填充与步幅
  • 《Google 软件工程》:如何写好文档?
  • 3. 【Blazor全栈开发实战指南】--Blazor是什么?为什么选择Blazor?
  • 在AI应用中Prompt撰写重要却难掌握,‘理解模型与行业知识是关键’:提升迫在眉睫
  • 【读书笔记】《Effective Modern C++》第4章 Smart Pointers
  • Node.js 聊天内容加密解密实战教程(含缓存密钥优化)
  • 4. 关于CEF3 使用的一些记录及仓颉端封装的情况
  • 手写muduo笔记