如何在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() // 验证为空值 );
补充说明
- 若不需要区分整数和浮点数,统一验证为数字类型,可把
isA(Integer.class)/isA(Double.class)替换为isA(Number.class) - 原示例代码的错误已修正:补全字段路径(如
enabled改为odd.enabled)、修正拼写错误(isboolean()改为isA(Boolean.class))、补充缺失的逗号 - 必须导入Hamcrest的静态匹配器类
org.hamcrest.Matchers.*,否则无法使用这些断言方法
内容的提问来源于stack exchange,提问作者swapnil shirke
相关产品推荐
相关产品推荐

