Karate测试校验CSV列拼接值不存在报错的无Java工具解决方法
解决方法
原代码报错的核心原因是错误将Karate嵌入式表达式#()写在了JS闭包内部,且数组取值逻辑错误:responseartikel[].Kurztext_1 + responseartikel[*].Kurztext_2会直接拼接两个数组对象,而不是对应索引的字段值,最终导致JSON解析异常。
不需要编写Java工具类,直接用Karate内置的JS能力就能实现需求,有两种常用实现方案:
方法1:使用karate.map遍历拼接(最稳妥)
直接遍历CSV解析后的对象数组,逐行拼接两个字段,不会出现索引错位问题:
# 遍历responseartikel数组,逐行拼接Kurztext_1和Kurztext_2 * def concatField = karate.map(responseartikel, function(item){ return item.Kurztext_1 + item.Kurztext_2 }) # 校验拼接结果不包含预期值 * match concatField !contains expected
方法2:按索引手动拼接(适合确定两个字段数组长度完全一致的场景)
如果确认responseartikel所有行都存在Kurztext_1和Kurztext_2两个字段,也可以用更直观的循环写法:
# 分别提取两个字段的数组 * def texts1 = responseartikel[*].Kurztext_1 * def texts2 = responseartikel[*].Kurztext_2 * def concatField = [] # 按索引逐位拼接 * for (var i = 0; i < texts1.length; i++) { concatField.add(texts1[i] + texts2[i]) } * match concatField !contains expected
注意事项
Karate的#()嵌入式表达式仅适用于JSON/XML静态赋值、match断言的静态匹配场景,不要嵌套在JS代码块、闭包内部使用。
内容的提问来源于stack exchange,提问作者Stephanie H
相关产品推荐
相关产品推荐

