我使用的是空手道版本0.8.0.1,我想执行以下步骤来测试一些响应。
从Web服务2的响应中,我想获得带有json-path的price字段的值,如下所示(传递上面第3步中的值):
因此有很多货币,但是我只想验证Web服务1返回的货币的价格(它将始终是随机的),并将其传递给Web服务2的输出以获取价格。 一旦获得价格,我便会将每个价格值与DB返回的值进行匹配。
我不确定是否有任何简单的方法可以将服务1返回的值一个接一个地传递到服务2的json-path中。这样做的任何建议都会有所帮助,因为我将要自动化的大多数Web服务都是如此。
答案 0 :(得分:2)
在空手道中有多种方法可以做到这一点。以下应该为您提供一些指导。请注意,在使用_$
时如何使用魔术变量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
a second feature file in a loop,这对于您的特定用例可能是必需的。还有一个难题可能是-将任何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'}]