Karate框架校验JSON响应日期为null或晚于当前日期问题
Karate接口自动化响应日期字段校验实现
待实现校验规则
- 所有
startDate字段值小于等于当前日期时间 - 路径
response.content[*].goal[*].target[*].due.dueDate的字段值为null,或晚于当前日期时间
原有断言失效原因
- Karate内置
todaysdate默认输出纯日期格式字符串,和接口返回的带时区ISO时间字符串无法直接比较大小,需统一转换为可比较的时间类型 - 或逻辑判断需要写在
#?自定义校验函数内部,不能直接在匹配结构里用||拼接字段规则 - 通配符遍历数组校验时,需用
match each语法,不需要额外在外层包裹数组符号
正确实现代码
先定义公共时间转换逻辑和当前时间基准值:
# 获取当前时间毫秒时间戳作为比较基准 * def currentTs = new Date().getTime() # 定义日期字符串转时间戳方法,兼容null值场景 * def parseTs = function(val) { return val ? new Date(val).getTime() : null }
编写对应字段校验:
# 全量校验所有startDate <= 当前时间 * match each response.content[*].goal[*].start == { startDate: '#? parseTs(_) <= currentTs' } # 全量校验dueDate规则:为null 或 晚于当前时间 * match each response.content[*].goal[*].target[*].due == { dueDate: '#? _ == null || parseTs(_) > currentTs' }
如果接口返回的日期是非标准格式,只需调整
parseTs方法内的日期解析逻辑,保证转换后的值可以正确比较大小即可。
内容的提问来源于stack exchange,提问作者Hema Latha
相关产品推荐
相关产品推荐

