【问题标题】:How to validate multiple possible values in Karate using a schema如何使用模式验证空手道中的多个可能值
【发布时间】:2019-12-12 14:48:30
【问题描述】:

我目前正在使用 Swagger 模式,它为多个值定义了枚举。我想知道如何针对我的招摇文件断言我的回应。我想确保返回的响应值只是模式中指定的值之一(想想 Swagger 中的枚举)。如果响应中返回的任何其他内容未在架构内的数组中定义,则测试应该失败。

如何使用以下方法实现这一点:

Schema.json

{
    "itemType":{
        "hardware":[
            "VIDEO CARD",
            "SOLID STATE DRIVE",
            "HARD DRIVE"
        ] 
    }
}

所有值都是可选的,并将以字符串值响应。

回复:

{
    "itemType": {
        "hardware": "HARD DRIVE"
    }
}

我的猜测是它可能类似于* match response.itemType.hardware == "##string? _ == 'VIDEO CARD' || _ == 'SOLID STATE DRIVE' || _ == 'HARD DRIVE'",但我的语法可能不正确。

【问题讨论】:

    标签: enums swagger karate


    【解决方案1】:

    你可以试试这个:

    * def schema = 
    """
    {
        "itemType":{
            "hardware":[
                "VIDEO CARD",
                "SOLID STATE DRIVE",
                "HARD DRIVE"
            ] 
        }
    }
    """
    * def response = 
    """
    {
        "itemType": {
            "hardware": "HARD DRIVE"
        }
    }
    """
    * match response == { itemType: { hardware: '#? schema.itemType.hardware.contains(_)' } }
    * def isValidHardware = function(x){ return schema.itemType.hardware.contains(x) }
    * match response == { itemType: { hardware: '#? isValidHardware(_)' } }
    

    【讨论】:

      【解决方案2】:

      我觉得这更具可读性:

            * match schema.itemType.hardware contains response.itemType.hardware
      

      在右侧有response 可能有点不寻常。

      【讨论】:

        【解决方案3】:

        另一种验证方式是使用 ma​​tchers。使用 JSON 路径,您可以获取元素内的所有内容,并在 comparison operators 的帮助下,例如 containscontains only!contains检查字符串列表中是否存在某些元素。例如,在您的情况下:

        Scenario:
          Given path '/something'
          When method GET
          Then status 200
          And print response
          And match response.itemType.hardware[*] contains only ["value1", "value2"]
        

        以这种方式更清楚地编写您的测试。更具可读性。

        注意:考虑到contains 运算符仅适用于列表,因此您需要获取列表。在前面的示例中,我们使用 * 符号来实现。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-28
          • 1970-01-01
          • 2021-08-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-03
          相关资源
          最近更新 更多