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

REST-assured 接口测试编写指南

REST-assured 简介

REST-assured 是一个基于 Java 的 DSL(领域特定语言)库,专门用于简化 RESTful API 测试的编写。它提供了流畅的 API 接口,使得测试代码更加易读易写,支持 JSON 和 XML 等多种响应格式的验证。

基本环境配置

  1. Maven 依赖配置

    <dependency><groupId>io.rest-assured</groupId><artifactId>rest-assured</artifactId><version>5.3.0</version><scope>test</scope>
    </dependency>
    

    详情见:https://blog.csdn.net/Y1_again_0_again/article/details/148828971?spm=1011.2415.3001.5331

  2. 静态导入(简化代码):

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

基础测试代码示例

GET 请求测试

@Test
public void testGetUser() {given().param("userId", "12345")  // 设置查询参数.when().get("https://api.example.com/users")  // 发送GET请求.then().statusCode(200)  // 验证状态码.body("name", equalTo("John"))  // 验证响应体中的name字段.body("age", greaterThan(18));  // 验证age字段大于18
}

POST 请求测试

@Test
public void testCreateUser() {String requestBody = "{\"name\":\"Alice\",\"age\":25}";given().contentType(ContentType.JSON)  // 设置请求头.body(requestBody)  // 设置请求体.when().post("https://api.example.com/users")  // 发送POST请求.then().statusCode(201)  // 验证创建成功.body("id", notNullValue());  // 验证响应中包含id字段
}

高级用法

认证设置

given().auth().basic("username", "password")  // 基本认证// 或 .auth().oauth2("access_token")  // OAuth2认证
.when().get("/secure-endpoint")
.then().statusCode(200);

JSON Schema 验证

@Test
public void testJsonSchema() {when().get("/products/1").then().assertThat().body(matchesJsonSchemaInClasspath("product-schema.json"));
}

文件上传

given().multiPart("file", new File("test.png"))  // 上传文件
.when().post("/upload")
.then().statusCode(200);

最佳实践

  1. 基础URL配置

    RestAssured.baseURI = "https://api.example.com";
    RestAssured.basePath = "/v1";
    
  2. 日志记录

    given().log().all()  // 记录请求详情
    .when().get("/resource")
    .then().log().body();  // 记录响应体
    
  3. 响应时间验证

    when().get("/resource")
    .then().time(lessThan(2000L));  // 响应时间应小于2秒
    
  4. 使用JSONPath提取值

    String userId = 
    given().param("name", "John")
    .when().get("/users")
    .then().extract().path("[0].id");  // 提取第一个用户的id
    

常见验证场景

  • 验证状态码:.statusCode(200)
  • 验证响应头:.header("Content-Type", containsString("application/json"))
  • 验证数组大小:.body("users.size()", equalTo(3))
  • 验证数组元素:.body("users[0].name", equalTo("John"))
  • 验证响应时间:.time(lessThan(2000L))

通过以上示例和方法,可以构建完整的API测试套件,覆盖各种测试场景。REST-assured编写代码进行接口测试

http://www.xdnf.cn/news/19439.html

相关文章:

  • 【Canvas与戳记】蓝底黄面十六角Premium Quality戳记
  • 开发环境全面配置指南:语言环境与数据库工具
  • 基于单片机音乐喷泉/音乐流水灯/音乐播放器设计
  • 规律作息 + 养成好的习惯 + 考研倒计时 111 天 + 线面积分入门 1 下半部分
  • 【LeetCode - 每日1题】鲜花游戏
  • 2025年- H101-Lc209--1979.找出数组的最大公约数(gcd最大公约数)--Java版
  • 【物联网】MQTT(Message Queuing Telemetry Transport)是什么?
  • 深入解析 dex2oat:vdex、cdex、dex 格式转换全流程实战
  • RK3576开发板串口配置及使用
  • 使用 SVM(支持向量机)进行图像分类:从读取图像到训练与分类的完整流程
  • 深入解析Nginx常见模块2
  • 【SoC】【W800】基于W800的PWM实现
  • python pyqt5开发DoIP上位机【源码】
  • 合集:搭建wiki知识库
  • C++广度优先搜索
  • React Native基本用法
  • 从支付工具到收益资产:稳定币在 Berachain 上的二次进化
  • 四、GC 垃圾回收(二)
  • 小模型 vs 大模型:企业 AI 落地的成本、性能与场景适配选择
  • 广东省省考备考(第九十天8.30)——判断推理(第十节课)
  • 企业为什么需要部署数据防泄露系统?
  • 第三十一天:数列求和取模
  • C++讲解---如何设计一个类
  • 【lua】模块基础及应用
  • LED灯带离线语音控制方案WTK6900P
  • fork详解(附经典计算题)
  • 苍穹外卖项目笔记day02
  • Rust 登堂 之 Sized和不定长类型 DST(七)
  • leetcode刷题记录08——top100题里的5道中等题
  • Vue基础知识-methods事件绑定(@事件名和v-on:事件名)和常用事件修饰(.prevent/.stop/.once/.enter)