如何用Karate验证API响应属性为指定可选值及排查断言问题
Karate框架API响应断言错误分析与修正
错误原因
你的Match语句混淆了逐个元素断言和数组整体断言的语法逻辑:
cityDetails[*].capital会提取所有capital值组成数组['BLR', 'BOM']match each是用来遍历数组中的每个元素,对单个元素做断言;但你后面接的contains any ['BOM', 'DEL', 'BLR']是针对数组整体的断言逻辑,用来判断数组是否包含目标列表中的任一元素。- 实际执行时,代码会对每个capital字符串(比如'BLR')执行
contains any [...],这会判断字符串是否包含数组里的子串,显然不符合你的验证需求,导致断言失败。
正确写法
根据你的需求(验证每个capital属性值属于{BOM, DEL, BLR}中的任一值),有两种简洁的实现方式:
方式1:直接使用#in表达式
* match each cityDetails[*].capital == '#in BOM,DEL,BLR'
方式2:定义允许值数组后断言
* def allowedCapitals = ['BOM', 'DEL', 'BLR'] * match each cityDetails[*].capital == '#in allowedCapitals'
补充:如果需求是验证数组中至少存在一个符合条件的capital
若你实际需求是判断响应里至少有一个capital属于目标集合,可直接去掉each,使用数组整体断言:
* match cityDetails[*].capital contains any ['BOM', 'DEL', 'BLR']
内容的提问来源于stack exchange,提问作者u238825
相关产品推荐
相关产品推荐

