首页 > 解决方案 > 使用场景大纲中的示例匹配每个

问题描述

我发现使用* match each response.xyz超级强大的合并对象结构测试和内容测试。有没有办法将它与Examples表格一起使用<placeholder>

我有类似的东西,我想在上面使用示例表:

    * match each response.Services ==
  """
  { 
    "ServiceId" : #present, 
    "Name" : <Name>, 
    "Description" : #present, 
    "InActive" : <Inactive>, 
  }
  """
    Examples: 
  | ClientId | Name       | Status | ErrorCode | Inactive |
  |   400152 | "Foxtrot"  |    200 |         0 | false    |
  |   400152 | "Waltz"    |    200 |         0 | false    |

我明白了

  "Services": [
{
  "ServiceId": 3,
  "Name": "Waltz",
  "Description": "Waltzing like Matilda",
  "InActive": false,
},
{
  "ServiceId": 4,
  "Name": "Foxtrot",
  "Description": "",
  "InActive": false,
},

回来作为回应。显然,当我在 中使用多行时Examples:,会导致多次测试。

我正在寻找的是根据预定义的值测试数组中的每个对象,但不知道它们会以什么顺序显示。并使用表格生成的有序方法。

标签: karate

解决方案


而不是each,试试这个:

* match response.Services contains
  """
  { 
    "ServiceId" : #present, 
    "Name" : <Name>, 
    "Description" : #present, 
    "InActive" : <Inactive>, 
  }
  """

编辑:好的,另一种选择。顺便说一句,我至少可以想到 5 种不同的方法:P

Scenario:
* table data
  | ClientId | Name       | Status | ErrorCode | Inactive |
  |   400152 | "Foxtrot"  |    200 |         0 | false    |
  |   400152 | "Waltz"    |    200 |         0 | false    |
* def expected = karate.map(data, function(x){ return { ServiceId: '#present', Name: x.Name, Description: '#present', InActive: x.Inactive} })
* match response.Services contains expected

EDIT2:如果你可以控制整个table

Scenario:
* table expected
| Name       | InActive | ServiceId  | Description |
| "Foxtrot"  | false    | '#present' | '#present'  |
| "Waltz"    | false    | '#present' | '#present'  |
* match response.Services contains expected

推荐阅读