【问题标题】:Karate: Match a dynamic child response with the Parent API response空手道:将动态子响应与父 API 响应匹配
【发布时间】:2020-06-03 17:55:33
【问题描述】:

我有一个场景,其中父 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]
        }
    }
}  

【问题讨论】:

    标签: karate


    【解决方案1】:

    给你:

    * 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
    

    现在我很确定您(或您团队中的任何其他人)将很难理解它到底是如何工作的。这让我想到了我给你的建议。

    大多数团队不做这种动态复杂的体操。这不是你应该进行测试的方式。

    您有两种情况。一种情况,您的孩子中有 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

    【讨论】:

      猜你喜欢
      • 2019-04-06
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      相关资源
      最近更新 更多