我有一个方案,其中父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]
}
}
}
答案 0 :(得分:2)
您在这里:
* copy last = child.array1
* remove last[0]
* def multi = {"parent":{"muid":"1234"},"elg":[{"EID":"E123"},{"members":"#(last)"}]}
* def expected = child.array1.length == 1 ? {"parent":{"muid":"1234"},"elg":[{"EID":"E123"}]} : multi
* match parent == expected
现在,我非常确定您(或团队中的其他任何人)将很难理解地球上的工作原理。这带给我我对您的建议。
大多数团队不会进行这种动态复杂的体操运动。那不是您应该进行测试的方式。
您有2种情况。一种情况是您的孩子中有1个元素。还有其他情况。
请编写两个单独的Scenario
-s,并确保传递给任何服务的数据均保证返回特定形状。如果您无法执行此操作,则可能意味着它是如此动态,以至于您没有必要进行测试-也许它首先不应该成为验证的重点。
因此您的测试变得简单。
Scenario: first case
# send request1, get child and parent
# match parent == {"parent":{"muid":"1234"},"elg":[{"EID":"E123"}]}
Scenario: second case
# send request2, get child and parent
# match parent == {"parent":{"muid":"1234"},"elg":[{"EID":"E123"},{"members":[{"mbr2":{"id":"A2"}}]}]}
有关如何简化不良测试的另一个示例,请参见:https://stackoverflow.com/a/54126724/143475