Karate接口测试:如何校验响应属性值为null及判断属性是否存在
Karate场景校验实现方案
你遇到的问题是Karate中karate.get()方法对「不存在的路径」和「路径存在但值为null」的情况都会返回null,无法直接区分,可通过以下方案实现两种场景的校验:
场景1:校验lastName属性存在且值为null
对应响应结构:
{ "name" : { "firstName" : "Peter", "lastName" : null } }
校验代码可直接使用Karate内置的#null匹配符,一行即可完成双重校验(自动验证属性存在且值为null):
* match response.name contains { lastName: '#null' }
如果需要拆分校验,也可以用karate.keyExists()方法配合取值判断:
* assert karate.keyExists('response.name.lastName') * match response.name.lastName == null
场景2:校验lastName属性不存在
对应响应结构:
{ "name" : { "firstName" : "Peter" } }
直接使用!contains语法配合#present匹配符即可完成校验:
* match response.name !contains { lastName: '#present' }
也可以用karate.keyExists()反向判断:
* assert !karate.keyExists('response.name.lastName')
原理解释
karate.get()的设计逻辑是对所有无有效返回的路径统一返回null,所以无法区分两种场景;而karate.keyExists()、contains语法和内置匹配符会直接读取JSON对象的键列表判断属性是否存在,不受属性值的影响。
内容的提问来源于stack exchange,提问作者Mandeep Rehal
相关产品推荐
相关产品推荐

