我发现使用* 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:
中使用多行时,它会导致多个测试。
我要寻找的是针对预定义的值测试数组中的每个对象,但不知道它们将以什么顺序显示。并使用表产生的有序方法。
答案 0 :(得分:1)
代替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