【问题标题】:Karate framework: Look for child API response(which is dynamic) in parent API空手道框架:在父 API 中寻找子 API 响应(动态)
【发布时间】:2020-06-01 16:54:13
【问题描述】:

我有一个场景,其中父 API 响应的一部分来自子 API。如果子 API 响应(它是动态的)只有一个数组元素,则无需匹配父 API 响应中的那个,if array size > 1 那么我需要从索引 1 开始匹配父 API 响应。

* def child =  {"array1":[{"mbr1":{"id":"A1"}},{"mbr2":{"id":"A2"}}]}

子 api 响应没有特定的顺序,array1 可以有 "n" 数组元素的数量(mbr1,mbr2,mbr3, etc)

如果子 API 响应如上所示,则父 API 响应如下所示:

* def parent =  {"parent":{"muid":"1234"},"elg":[{"EID":"E123"},{"members":[{"mbr2":{"id":"A2"}}]}]}

因此,只有在满足上述条件时,才会填充父 API 响应到最终子 API 响应。 如果子 API 只返回一个元素,那么父 API 响应将如下所示:

* def parent = {"parent":{"muid":"1234"},"elg":[{"EID":"E123"}]}

那么,如果孩子返回 200 OK 并且孩子数组长度 > 1,我该如何进行匹配以查看孩子是否存在于父母中? 所以我正在寻找以下场景的解决方案:

if (child responseStatus == 200){
    if (child.array1.length > 1){
        for (i = 1;i <= child.array1.length; i++){
            parent.elg[1].members[i] contains child.arrays1[i]
        }
    }
}  

【问题讨论】:

  • 我不会再说这个了,但是你可以做一些工作来简化这个例子,创建一个像{ a: [ 1, 2 ] }这样的简单json有那么难吗?如果你不这样做,人们就需要更多的时间来回答,或者人们甚至不会尝试

标签: karate


【解决方案1】:

给你,请阅读文档:https://github.com/intuit/karate#conditional-logic

* def parentArray = parent.elg[1].array1
* def expected = child.array1.length > 1 ? child.array1 : parentArray
* match parentArray contains only expected

【讨论】:

  • 谢谢@Peter Thomas。我已经更新了我的 JSON。如果子 api 响应只有一个元素,* def parentArray = parent.elg[1].array1 将为 null。
  • 我在 Qn 中添加了更多细节。谢谢
  • @JCK 请提出一个新问题
猜你喜欢
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
相关资源
最近更新 更多