如何使用 if 条件检查附加值(使用空手道框架)?
How to check additional values with if condition (using karate framework)?
我想用 json 模式检查来自 GET/birds 请求的响应。在我的专题中:
* def abs = read (birds.json)
* match response == abs.birdsSchema
我需要将架构放在 json 文件中,而不是功能中。
我必须根据性别检查其他值。例如:如果性别是男性,则检查颜色是蓝色,尾巴是长还是短。如果性别是女性,则检查 "sings" 是真还是假,以及鸡蛋的数量。
所以我输入了birds.json:
"birdsSchema":{
"id": "#string",
"owner": "#number",
"town": "#? _ == 'New York' || _ == 'Washington'",
"type": "object",
"oneOf": [
{
"properties": {
"gender": {"enum": ["male"]},
"color":"blue",
"tail": "#? _ == 'long' || _ == 'short'"
}
},
{
"properties": {
"gender": {"enum": ["female"]},
"sings" : "#? _ == true || _ == false"
"eggs": "##number"
}
}
]
}
但是没用。错误:com.intuit.karate.exception.KarateException:路径:$[0].type,实际:'female',预期:'object',原因:不相等。
如何在我的 json 文件中执行此条件检查?
让我们承认这非常困难,因为如果我正确理解你的问题,你正在寻找的 JSON keys 是动态的。
空手道的部分乐趣在于,我至少可以想到 5 种不同的方法来优雅地解决这个问题。这里只有一个:
* def response = { color: 'black', aaa: 'foo' }
* def schema = { color: '#? _ == "black" || _ == "white"' }
* def extra = (response.color == 'black' ? { aaa: '#string' } : { fff: '#string' })
* match response contains schema
* match response contains extra
如果你根据上面的提示创建一个JS函数,你可能会得到更好的解决方案。请记住,在 JS 函数中,您可以使用 karate.set
之类的方法来动态创建键。所以有很多可能性:)
编辑:看起来上面的例子是错误的,键是不是动态的。然后很容易,记住 $
指的是 JSON 根:
* def response = { color: 'black', extra: 'foo' }
* def schema = { color: '#? _ == "black" || _ == "white"', extra: '#($.color == "black" ? "foo" : "bar")' }
* match response == schema
我想用 json 模式检查来自 GET/birds 请求的响应。在我的专题中:
* def abs = read (birds.json)
* match response == abs.birdsSchema
我需要将架构放在 json 文件中,而不是功能中。 我必须根据性别检查其他值。例如:如果性别是男性,则检查颜色是蓝色,尾巴是长还是短。如果性别是女性,则检查 "sings" 是真还是假,以及鸡蛋的数量。
所以我输入了birds.json:
"birdsSchema":{
"id": "#string",
"owner": "#number",
"town": "#? _ == 'New York' || _ == 'Washington'",
"type": "object",
"oneOf": [
{
"properties": {
"gender": {"enum": ["male"]},
"color":"blue",
"tail": "#? _ == 'long' || _ == 'short'"
}
},
{
"properties": {
"gender": {"enum": ["female"]},
"sings" : "#? _ == true || _ == false"
"eggs": "##number"
}
}
]
}
但是没用。错误:com.intuit.karate.exception.KarateException:路径:$[0].type,实际:'female',预期:'object',原因:不相等。 如何在我的 json 文件中执行此条件检查?
让我们承认这非常困难,因为如果我正确理解你的问题,你正在寻找的 JSON keys 是动态的。
空手道的部分乐趣在于,我至少可以想到 5 种不同的方法来优雅地解决这个问题。这里只有一个:
* def response = { color: 'black', aaa: 'foo' }
* def schema = { color: '#? _ == "black" || _ == "white"' }
* def extra = (response.color == 'black' ? { aaa: '#string' } : { fff: '#string' })
* match response contains schema
* match response contains extra
如果你根据上面的提示创建一个JS函数,你可能会得到更好的解决方案。请记住,在 JS 函数中,您可以使用 karate.set
之类的方法来动态创建键。所以有很多可能性:)
编辑:看起来上面的例子是错误的,键是不是动态的。然后很容易,记住 $
指的是 JSON 根:
* def response = { color: 'black', extra: 'foo' }
* def schema = { color: '#? _ == "black" || _ == "white"', extra: '#($.color == "black" ? "foo" : "bar")' }
* match response == schema