如何在Karate中验证JSON响应字段的类型与非空约束?
解决Karate JSON响应验证的类型约束问题
嗨,我刚好熟悉Karate的JSON断言语法,这就帮你修正验证规则!
你的需求很明确:
id必须是整数类型且不能为nullName只能是字符串类型,或者可以为null
你之前用的#present确实不符合要求,因为它只检查字段存在,但不限制类型——哪怕Name是数字或布尔值也会通过。正确的写法应该用Karate的类型验证关键字加上可选标记:
def jsonValidate = { id: '#integer', // 强制整数类型,自动排除null Name: '#string?' // 允许字符串或null,拒绝其他类型 }
关键语法解释:
#integer:这个关键字会严格验证字段值是整数类型(包括Java的Integer包装类或int基本类型),如果id是null,这个验证会直接失败,刚好满足你“id不可为null”的要求。#string?:这里的?后缀是Karate的特殊语法,表示该字段可以是指定的类型(这里是字符串)或者null。这样既允许Name为null,又会拒绝其他非字符串类型的值(比如数字、对象、布尔值)。
测试示例:
下面这些响应会通过验证:
// Name为字符串的有效响应 { "id": 1001, "Name": "Shivam" } // Name为null的有效响应 { "id": 1002, "Name": null }
而这些情况会验证失败:
id为null:{"id": null, "Name": "test"}→ 不符合#integer的类型要求Name为数字:{"id": 1003, "Name": 999}→ 不是字符串也不是null,违反#string?规则Name为布尔值:{"id": 1004, "Name": true}→ 同样不符合类型约束
这样设置后,你的JSON验证就完全符合需求啦!
内容的提问来源于stack exchange,提问作者Shivam Gupta
相关产品推荐
相关产品推荐

