You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rest Assured中验证JSON响应字段的数据类型

在Rest Assured中验证JSON响应指定字段的数据类型

问题背景

需要在Rest Assured接口测试中,仅验证JSON响应里指定字段的数据类型(而非实际值),给定的JSON响应结构如下:

{
  "odd": {
    "price": 200,
    "ck": 12.2,
    "name": "test this",
    "enabled": true,
    "tags": null
  }
}

希望能实现类似示例中的断言方式,直接验证字段类型。

解决方案:使用Hamcrest匹配器(Rest Assured原生支持)

Rest Assured本身集成了Hamcrest断言库,无需额外引入依赖,直接用Hamcrest的类型匹配器就能实现字段类型验证。以下是针对各字段的具体断言规则:

  • 整数/浮点数(数字类型):用isA(Number.class)验证是否为数字,或用更具体的isA(Integer.class)/isA(Double.class)区分整数和浮点数
  • 字符串类型:isA(String.class)
  • 布尔类型:isA(Boolean.class)
  • 空值:nullValue()(或isNull(),两者等价)

完整示例代码

import static org.hamcrest.Matchers.*;
import io.restassured.specification.RequestSpecification;
import io.restassured.response.ValidatableResponse;
import static io.restassured.RestAssured.given;

// ... 其他业务代码 ...

ValidatableResponse response =
    given()
        .spec(requestSpec)
        .headers("authkey", "abcdxxxxxxxxxyz")
        .pathParam("uid", oddUid)
    .when()
        .get("/orders/{uid}")
    .then()
        .assertThat()
        .statusCode(200)
        .body(
            "odd.price", isA(Integer.class), // 验证为整数类型
            "odd.ck", isA(Double.class),     // 验证为浮点数类型
            "odd.name", isA(String.class),   // 验证为字符串类型
            "odd.enabled", isA(Boolean.class), // 验证为布尔类型
            "odd.tags", nullValue()          // 验证为空值
        );

补充说明

  1. 若不需要区分整数和浮点数,统一验证为数字类型,可把isA(Integer.class)/isA(Double.class)替换为isA(Number.class)
  2. 原示例代码的错误已修正:补全字段路径(如enabled改为odd.enabled)、修正拼写错误(isboolean()改为isA(Boolean.class))、补充缺失的逗号
  3. 必须导入Hamcrest的静态匹配器类org.hamcrest.Matchers.*,否则无法使用这些断言方法

内容的提问来源于stack exchange,提问作者swapnil shirke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:06:28