空手道 API 框架 - 如何检查特定字段值在数组下是否重复

Karate API framework - How can I check that a particular field value is not coming as duplicate under an array

使用 karate 框架我如何确保 persons 数组下的 personId 不应该作为重复值出现

如果您看到下面的响应,id:1 记录有重复的 personId,因此在这种情况下我的测试应该失败。此外,persons 数组本质上是动态的,也可能有一些记录包含超过 4 个 personIds。

所以一个通用的方法应该会有所帮助。请帮忙。

    {
        "total": 10,
        "count": 10,
        "results": [
            {
                "id": "1",
                "source": {
                    "authors": {
                        "persons": [
                            {
                                "personId": 11
                            },
                            {
                                "personId": 11
                            }
                        ]
                    }
              }
          },
          {
                "id": "2",
                "source": {
                    "authors": {
                        "persons": [
                            {
                                "personId": 11
                            },
                            {
                                "personId": 15
                            }
                        ]
                    }
              }
          }
    ]
}

给你,一种可能的解决方案是使用 JS 函数并使用 Java Set:

* def isValid =
"""
function(x) {
  var personIds = karate.jsonPath(x, '$[*].personId');
  var distinct = new java.util.HashSet(personIds);
  return personIds.size() == distinct.size();
}
"""
* match each $..persons == '#? isValid(_)'