Karate 空手道API测试-从响应中删除重复值,并将其与新响应进行比较

Karate 空手道API测试-从响应中删除重复值,并将其与新响应进行比较,karate,Karate,我有一个场景,作为响应,我收到了重复的值 And def abcName = $ListDataSet_Response.rowData[*].4 并打印abcName [ "BP Part Sht NCA MS", "BP Part Sht NCA MS", "BP Part Sht NCA MS", "BP Part Sht NCA MS", "BP Part Sht NCA MS", "Bay Pond USB, Inc MS", "Bay Pond USB

我有一个场景,作为响应,我收到了重复的值

And def abcName =  $ListDataSet_Response.rowData[*].4
并打印abcName

 [
 "BP Part Sht NCA MS",
  "BP Part Sht NCA MS",
  "BP Part Sht NCA MS",
  "BP Part Sht NCA MS",
  "BP Part Sht NCA MS",
  "Bay Pond USB, Inc MS",
  "Bay Pond USB, Inc MS",
  "BP USB III Inc MS",
  "BP USB III Inc MS",
  "BP USB III Inc MS",
  "BP USB III Inc MS",
  "BP CS Sht NCA",
  "BP CS Sht NCA",
  "BP CS Sht NCA",
  "BP CS Sht NCA", 
  "BP USB IV, Inc MS",
  "BP Mrts Block NCA MS",
  "BP Mrts Block NCA MS"

  ]
现在,我有了一个功能,使用distinct values查询,我可以在没有重复值的情况下获得响应。执行该操作后,新的响应是:

  [
  "BP Part Sht NCA MS",
  "Bay Pond USB, Inc MS",
  "BP USB III Inc MS",
  "BP CS Sht NCA",
   "BP USB IV, Inc MS",
  "BP Mrts Block NCA MS",
  ]
现在,我需要用前面的响应来验证这个响应,记住如果我从第一个响应中删除重复的值,它将是我的新响应(从distinct values quesry接收)

所有这些值都是运行时和动态的

我到目前为止的做法是:

第一:

  • 将abcName存储在一个集合中(Java)。它将删除副本
  • 现在将其与新的响应进行比较

    这是不可行的,因为两者类型不同

    第二:

  • 在集合中存储abcName(Java)

  • 将第二个响应存储在另一个集合中(这将违背目的,因为它应该是集合格式)

    第三:

  • 在集合中存储abcName(Java)

  • 将此集合转换为列表:此操作失败
  • 将第二个响应存储在列表中
  • 现在比较这两个列表

    在空手道中,我们有没有办法不用Java就可以进行这种活动


  • 对于任何遇到此问题的人,在1.0+中,上述答案不再有效-现在需要使用karate.toJava()才能将其转换为哈希集,即:

    * def response = 
    """
    [
     "BP Part Sht NCA MS",
      "BP Part Sht NCA MS",
      "BP Part Sht NCA MS",
      "BP Part Sht NCA MS",
      "BP Part Sht NCA MS",
      "Bay Pond USB, Inc MS",
      "Bay Pond USB, Inc MS",
      "BP USB III Inc MS",
      "BP USB III Inc MS",
      "BP USB III Inc MS",
      "BP USB III Inc MS",
      "BP CS Sht NCA",
      "BP CS Sht NCA",
      "BP CS Sht NCA",
      "BP CS Sht NCA", 
      "BP USB IV, Inc MS",
      "BP Mrts Block NCA MS",
      "BP Mrts Block NCA MS"
    ]
    """
    * json response = new java.util.HashSet(karate.toJava(response))
    * def expected =
    """
    [
      "BP Part Sht NCA MS",
      "Bay Pond USB, Inc MS",
      "BP USB III Inc MS",
      "BP CS Sht NCA",
       "BP USB IV, Inc MS",
      "BP Mrts Block NCA MS",
    ]
    """
    * match response contains only expected
    

    此“预期”响应是硬编码的。无法使用硬编码值。由于响应是在运行时发出的,硬编码值断言将随时失败。@deepakmathpal现在我希望您理解,您可以在右侧使用变量,例如,
    *def expected=response2
    -任何其他问题都可以解决。这一部分是新的,但仍有阻碍。*json response=new java.util.HashSet(response)谢谢!我想知道我们是否应该添加一个
    karate.distinct()
    API,我们添加了
    karate.sort()
    已经在1.X(编辑)中了-打开了一个问题:那太棒了!
    * def response = 
    """
    [
     "BP Part Sht NCA MS",
      "BP Part Sht NCA MS",
      "BP Part Sht NCA MS",
      "BP Part Sht NCA MS",
      "BP Part Sht NCA MS",
      "Bay Pond USB, Inc MS",
      "Bay Pond USB, Inc MS",
      "BP USB III Inc MS",
      "BP USB III Inc MS",
      "BP USB III Inc MS",
      "BP USB III Inc MS",
      "BP CS Sht NCA",
      "BP CS Sht NCA",
      "BP CS Sht NCA",
      "BP CS Sht NCA", 
      "BP USB IV, Inc MS",
      "BP Mrts Block NCA MS",
      "BP Mrts Block NCA MS"
    ]
    """
    * json response = new java.util.HashSet(karate.toJava(response))
    * def expected =
    """
    [
      "BP Part Sht NCA MS",
      "Bay Pond USB, Inc MS",
      "BP USB III Inc MS",
      "BP CS Sht NCA",
       "BP USB IV, Inc MS",
      "BP Mrts Block NCA MS",
    ]
    """
    * match response contains only expected