当前位置: 首页 > 知识库问答 >
问题:

如何循环通过空手道响应数组并将其传递到另一个web服务响应的json路径中

左劲
2023-03-14

我正在使用空手道版本0.8.0.1,我想执行以下步骤来测试一些响应。

>

使用jsonpath从web服务1的响应中查找货币值:$。货币

步骤2给出以下结果:<代码>[“USD”、“HKD”、“SGD”、“INR”、“GBP”]

现在我为Web服务2使用Get方法

从Web服务2的响应中,我想使用json-path获取价格字段的值,如下所示(传递上面第3步的值):

$. hold[?(@. currency=='USD')]. price

$. hold[?(@. currency=='HKD')]. price

$.控股[?(@. currency=='SGD')].价格

<代码>$。持有[?(@.货币=='INR')]。价格

美元。持有[?(@. currency=='GBP')]。价格

所以有这么多货币,但我只想验证web服务1返回的货币的价格(总是随机的),并将其传递给web服务2的输出以获得价格。一旦我得到价格,我会将每个价格值与DB返回的值进行匹配。

我不确定是否有任何简单的方法可以将服务1返回的值逐个传递到服务2的json路径中,并获得所需的结果。任何这样做的建议都会很有帮助,因为我将自动化的大多数web服务都是这样。


共有1个答案

涂承运
2023-03-14

空手道有多种方法可以做到这一点。下面应该给你一些提示。请注意,当您使用“匹配每个”时,有一个神奇的变量。由于您可以在范围内引用任何其他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])' }

您可能已经看到如何在循环中调用第二个功能文件,这可能是您的特定用例所需要的。还有一个难题可能是这样的——将任何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/52845718/143475

 类似资料:
  • 下面是我在点击特定Web服务时收到的JSON响应: 我不知道哪个索引有我的期望值(我需要在确定哪个具有)后验证多个值),这是动态的。不希望使用硬编码值。并匹配,因为这将在下次更改。 对此我有两个问题: 如何将响应传递给java代码并获取具有的数组索引,以便使用此索引进行验证? 下面的代码不起作用。

  • 我如何将值从空手道API传递到Java类? 正如文档中提到的,我使用了以下代码段从Java API获取响应。但它返回带有未格式化的JSON内容的响应。 然后,我使用以下脚本打印响应。 多谢了。

  • 我有一个要求,其中,作为Web服务[Java]的一部分,我将作业的详细信息输入数据库,数据库由Windows服务[C#]异步处理,并对Javaweb服务通知作业的状态。 情景: 客户端对JavaWeb服务进行同步Restful调用。 JavaWeb Service将作业详细信息输入数据库(类似于进行异步调用),并等待Windows Service的响应(这是对JavaWeb Service的新HT

  • 我试图使用react router将props从app.jsx传递到某个路由组件,但出现以下错误

  • 我正在发出一个Soap请求,并接收作为数组返回的响应: 给定SOAPURL 和方法日志 def responseArray=/XML所需代码的路径/ def result=call read(“OtherRequest.Feature”)responseArray 另一个request.feature文件如下所示: 然而,我得到了这个错误: getNewMessageList.feature:27

  • 我一直在验证下面的回答。 当我使用空手道发出获取请求时,我会得到以下响应,我想验证它。 我试过: 它说它不是字符串。你能帮我确认一下这个请求吗?