我正在尝试制定一个模板请求,该请求可以通过场景大纲使用,该大纲将用于测试API,而不需要构建许多有效载荷&维护。
但是,当一个数组包含在包含不同可选块的请求中时,我遇到了一个问题——如果保留为空,则会形成并发送无效的JSON。
如何正确设置数组(当场景大纲中没有值时,排除",{}"?
背景:*def-template_request=read('./request/request.json'(
Scenario Outline: blah
* def request_payload = karate.filterKeys(template_request, <request_filter>)
Given request request_payload
When method post
Examples:
|denominationType1 |amount1|denominationType2 |amount2 |request_filter |
|NOTE |10 | | | 'depositDetail' |
|NOTE |10 |COINS |20 | 'depositDetail' |
从tbl的第一行发送的请求(对于面额类型2(硬币(具有空值(是:**参见下面仍然设置的第二个数组对象(尽管没有值-这是根据tbl(->设置第二个数组的逗号和大括号{}导致问题
{
"depositDetail": {
"denomination": [
{
"amount": "10",
"denominationType": "NOTE"
},
{
}
]
}
第二行的请求很好
{
"depositDetail": {
"denomination": [
{
"amount": "10",
"denominationType": "NOTE"
},
{
"amount": "20",
"denominationType": "COINS"
}
]
}
requestTemplate.json
{
"depositDetail": {
"denomination": [
{
"denominationType": ##(denominationType1),
"count": ##(count),
"amount": ##(amount1)
},
{
"denominationType": ##(denominationType2),
"amount": ##(amount2)
}
]
}}
我在过滤器或功能方面没有运气-你能帮我吗?
您还没有提供模板。不管怎样,我就是这么做的。你可以试试,看看效果如何。
Scenario Outline:
* def payload = { denomination: [] }
* if (type1) payload.denomination.push({ type: type1, amount: amount1 })
* if (type2) payload.denomination.push({ type: type2, amount: amount2 })
* url 'https://httpbin.org/anything'
* request payload
* method post
Examples:
| type1 | amount1 | type2 | amount2 |
| NOTE | 10 | | |
| NOTE | 10 | COIN | 20 |
但在我看来,即使是上述内容也并不优雅。我建议你不要把测试过于复杂,只做这样的事情:
Scenario Outline:
* def payload = {}
* payload[key] = items
* url 'https://httpbin.org/anything'
* request payload
* method post
Examples:
| key | items! |
| foo | [{ type: 'NOTE', amount: 10 }] |
| bar | [{ type: 'NOTE', amount: 10 }, { type: 'COIN', amount: 20 }] |