Karate 1.2中使用变量过滤JSON数组的表达式失效问题
Karate 1.2中动态变量匹配JSON数组元素的解决方法
针对你遇到的动态变量无法在JSONPath表达式中直接生效的问题,以下是几种可行的解决方法:
使用Karate内置的
filter()方法
这是最推荐的方式,Karate对集合操作有原生支持,直接用变量过滤数组更直观可靠:def name = 'Arun' def targetItem = response.data.filter(item => item.name == name)[0]动态拼接JSONPath表达式字符串
通过字符串拼接把变量值嵌入JSONPath中,绕过占位符解析的问题:def name = 'Arun' def jsonPath = "data[?(@.name=='"+name+"')][0]" def targetItem = response[jsonPath]结合
get()方法使用动态表达式
利用Karate的get()方法执行动态生成的JSONPath:def name = 'Arun' def targetItem = get(response, "data[?(@.name=='"+name+"')][0]")
原表达式失效的原因是:Karate中#(name)这类占位符仅在match断言的预期结果中会被解析,直接在脚本的JSONPath查询里使用不会生效,所以需要通过上述方式实现动态变量的引用。
内容的提问来源于stack exchange,提问作者Rahul Mohan
相关产品推荐
相关产品推荐

