在空手道中有多种方法可以做到这一点。下面应该给你一些提示。注意这里有一个神奇的变量_$
当你使用match each
。由于您可以引用范围内的任何其他 JSON,因此您有一些非常强大的选项。
* def expected = { HKD: 1, INR: 2, USD: 3}
* def response1 = ['USD', 'HKD', 'INR']
* def response2 = [{ currency: 'INR', price: 2 }, { currency: 'USD', price: 3 }, { currency: 'HKD', price: 1 }]
* match response2[*].currency contains only response1
* match each response2 contains { price: '#(expected[_$.currency])' }
您可能已经知道如何call循环中的第二个功能文件 https://github.com/intuit/karate#data-driven-features您的特定用例可能需要它。难题的另一部分可能是这样的 - 将任何 JSON 数组转换为 Karate 期望在循环中调用特征文件的形式是非常容易的:
* def response = ['USD', 'HKD', 'INR']
* def data = karate.map(response, function(x){ return { code: x } })
* match data == [{code: 'USD'}, {code: 'HKD'}, {code: 'INR'}]
编辑 - 现在有一个将基元数组转换为对象数组的快捷方式:https://stackoverflow.com/a/58985917/143475 https://stackoverflow.com/a/58985917/143475
另请参阅这个答案:https://stackoverflow.com/a/52845718/143475 https://stackoverflow.com/a/52845718/143475