【问题标题】:Response object templates in Karate空手道中的响应对象模板
【发布时间】:2018-07-13 19:06:39
【问题描述】:

有没有办法创建一个响应对象的模板结构,忽略字段的内容?在这种情况下,我有兴趣验证是否存在所有相关字段名称,而不管相关数据如何。 可以在场景大纲中使用的Templates 的无数据版本会很棒。

对于好奇的灵魂,我正在验证 API 文档。

验证以下结构的响应示例:

"Clinics": [
{
  "ClinicId": 1212,
  "MondayOpen": null,
  "MondayClose": null,
  "TuesdayOpen": null,
  "TuesdayClose": null,
  "WednesdayOpen": null,
  "WednesdayClose": null,
  "ThursdayOpen": null,
  "ThursdayClose": null,
  "FridayOpen": null,
  "FridayClose": null,
  "SaturdayOpen": null,
  "SaturdayClose": null,
  "SundayOpen": null,
  "SundayClose": null,
}]

我对 ClinicId 或其他字段的值不感兴趣。 我想知道 ClinicId、MondayOpen 等字段是否存在。

【问题讨论】:

    标签: karate


    【解决方案1】:

    我不确定我是否理解,但让我试试。如果您有如下 JSON:

    * def json = { foo: 'bar', baz: 'ban' }
    

    您可以按如下方式使用#present 标记:

    * match json == { foo: '#present', baz: '#present' }
    

    现在,听起来您想动态确定所需的键:

    * def keys = ['foo', 'baz']
    

    您可以轻松地以编程方式创建所需的模板:

    * def template = {}
    * eval karate.forEach(keys, function(k){ template[k] = '#present' })
    * match json == template
    

    希望有帮助!请注意,karate.forEach() 是 0.8.0 中的新内容 - 同时您可以使用 0.8.0.RC9。

    如果你参考这些例子,你可能会得到更多的想法:https://github.com/intuit/karate/blob/master/karate-demo/src/test/java/demo/search/search-complex.feature#L27

    【讨论】:

    • 使用#present 来匹配字段/键的存在就可以了。您能否详细说明如何将#present 用于根处的响应对象?测试 Clinics[] 是否存在。
    • 稍微玩弄一下就搞定了:*匹配响应包含{“Clinics”:#present}。非常棒的工具!
    • 在即将到来的 0.8.0 中,您将能够使用 * match response.Clinics == '#present' 作为替代方案 - 有些人更喜欢这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    相关资源
    最近更新 更多