我正在尝试验证具有可选键的复杂JSON
下面是完整的可执行特性文件
Feature: Complex Schema
Background:
* def JSONtobeValidiated =
"""
{
"MyArray": {
"MYinternalDetails": [
{
"SomeField": "dc",
"textfield": [],
"OptionalArray1": [
{
"Users": "Y",
"IsAllowed": "Y"
},
{
"Users": "Y",
"IsAllowed": "Y"
}
]
},
{
"SomeField": "nb",
"textfield": [],
"OptionalArray2": [
{
"CodingP": "GZ",
"Name": "Ok"
},
{
"CodingP": "BO",
"Name": "Saved"
},
{
"CodingP": "YB",
"Name": "Done"
}
]
},
{
"SomeField": "TRY",
"textfield": []
},
{
"SomeField": "cd",
"textfield": [],
"OptionalArray3": [
{
"Astring": "Lazy",
"AnotherString": "N",
"textfield": []
},
{
"Astring": "FREE",
"AnotherString": "N",
"textfield": [
{
"title": "Name",
"alertMessage": "Please enter valid name."
},
{
"title": "Mobile No",
"alertMessage": "Please enter mobile no."
}
]
}
]
},
{
"SomeField": "gv",
"textfield": [
{
"title": "First",
"alertMessage": "SOme Alert"
}
]
},
{
"SomeField": "OTP",
"textfield": [
{
"title": "Second",
"alertMessage": "SOme other elert."
}
]
},
{
"SomeField": "rp",
"textfield": [],
"OptionalArray4": [
{
"Code": "ACODE",
"textfield": []
}
]
}
]
}
}
"""
* def textfield = { title: '#string',alertMessage: '#string' }
* def OptionalArray1 = { Users: '#string',IsAllowed: '#string' }
* def OptionalArray2 = { CodingP: '#string',Name: '#string'}
* def OptionalArray3 = { Astring: '#string' ,AnotherString: '#string' ,textfield: '##[] textfield' }
* def OptionalArray4 = { Code: '#string',textfield: '##[] textfield' }
* def MYinternalDetails =
"""
{
SomeField: '#string',
textfield: '##[] textfield',
OptionalArray1: '#[] OptionalArray1',
OptionalArray2: '#[] OptionalArray2',
OptionalArray3: '#[] OptionalArray3',
OptionalArray4: '#[] OptionalArray4',
}
"""
* def MYinternalDetailsTest =
"""
{
SomeField: '#string',
textfield: '#ignore',
OptionalArray1: '#ignore',
OptionalArray2: '#ignore',
OptionalArray3: '#ignore',
OptionalArray4: '#ignore',
}
"""
* def ValidJsonSchema = { MyArray: { MYinternalDetails: '#[] MYinternalDetails' } }
* def ValidJsonSchemaTest = { MyArray: { MYinternalDetails: '#[] MYinternalDetailsTest' } }
Scenario: This works fine
* match JSONtobeValidiated == ValidJsonSchemaTest
* match JSONtobeValidiated.MyArray.MYinternalDetails == '#[] MYinternalDetailsTest'
Scenario: This should work
* match JSONtobeValidiated.MyArray.MYinternalDetails == '#[] MYinternalDetails'
Scenario: THis is what I am trying to get matched
* match JSONtobeValidiated == ValidJsonSchema
我想验证ValidJsonSchema,但无法绕过完整的模式匹配
当我尝试匹配可选字段时,我一直得到错误为
com.intuit.karate.exception.karateException:应在路径$中找到属性为[“MyArray”]的对象,但发现了“net.minidev.json.JsonArray”。根据JSONProvider:'com.jayway.jsonPath.spi.json.jsonSmartJsonProvider'这不是一个json对象。
我如何得到以下工作
* match JSONtobeValidiated == ValidJsonSchema
谢谢你的详细信息!我同意在复杂的嵌套数组等方面似乎存在一些问题。我使用了以下方法,您可以看到在空数组上的textfield
匹配需要进行一些工作。你能帮我一个忙,简化这一点,使空手道处理的任何差距是清楚的-并请记录一个问题。
Scenario:
* def json =
"""
[
{
"SomeField":"dc",
"textfield":[
],
"OptionalArray1":[
{
"Users":"Y",
"IsAllowed":"Y"
},
{
"Users":"Y",
"IsAllowed":"Y"
}
]
},
{
"SomeField":"nb",
"textfield":[
],
"OptionalArray2":[
{
"CodingP":"GZ",
"Name":"Ok"
},
{
"CodingP":"BO",
"Name":"Saved"
},
{
"CodingP":"YB",
"Name":"Done"
}
]
},
{
"SomeField":"TRY",
"textfield":[
]
},
{
"SomeField":"cd",
"textfield":[
],
"OptionalArray3":[
{
"Astring":"Lazy",
"AnotherString":"N",
"textfield":[
]
},
{
"Astring":"FREE",
"AnotherString":"N",
"textfield":[
{
"title":"Name",
"alertMessage":"Please enter valid name."
},
{
"title":"Mobile No",
"alertMessage":"Please enter mobile no."
}
]
}
]
},
{
"SomeField":"gv",
"textfield":[
{
"title":"First",
"alertMessage":"SOme Alert"
}
]
},
{
"SomeField":"OTP",
"textfield":[
{
"title":"Second",
"alertMessage":"SOme other elert."
}
]
},
{
"SomeField":"rp",
"textfield":[
],
"OptionalArray4":[
{
"Code":"ACODE",
"textfield":[
]
}
]
}
]
"""
* def textfield = { title: '#string', alertMessage: '#string' }
* def OptionalArray1 = { Users: '#string',IsAllowed: '#string' }
* def OptionalArray2 = { CodingP: '#string',Name: '#string'}
* def OptionalArray3 = { Astring: '#string' ,AnotherString: '#string', textfield: '##[]' }
* def OptionalArray4 = { Code: '#string',textfield: '##[]' }
* def MYinternalDetails =
"""
{
SomeField: '#string',
textfield: '##[] textfield',
OptionalArray1: '##[] OptionalArray1',
OptionalArray2: '##[] OptionalArray2',
OptionalArray3: '##[] OptionalArray3',
OptionalArray4: '##[] OptionalArray4',
}
"""
* match json == '#[] MYinternalDetails'
我试图用空手道验证响应模式,但数组存在问题。附加响应和功能以及my schema.json。 回应- } responseSchema.json {"页面":"#编号","per_page":"#编号","总计":"#编号","total_pages":"#编号","数据": "#[] #对象","支持":"#对象"}
我遇到了一个APIendpoint,得到了如下结果。 我想匹配数组中的元素 我尝试了以下方法: 但观察到以下例外: 预期:“#[]ind”,原因:没有数组或列表,请有人帮忙?
我试图为下面的响应编写JSON模式。响应是动态的它可以是细节或细节。如果响应中的是,那么响应将包含人对象(组织对象将不可用)。如果是,组织详细信息将包含在响应中(人对象将不可用)。下面给出了两种不同的预期反应 我试图使用下面给出的模式使上述条件有效 我目前面临的问题是,如果响应中的是,它会抛出以下错误 是否有任何方法可以在模式中指定,如果person对象可用,则organization对象将不可用
我只是想知道如何进行条件模式验证。API响应是基于键的动态响应。如果是,那么,人的详细信息将被包括,如果是组织的详细信息将被包括在JSON响应中。所以响应可以是以下任何一种形式 我为验证上述2个场景而创建的架构如下 但是架构与实际响应不匹配。我应该对架构进行哪些更改才能使其工作?
我正在使用空手道验证GET请求的整个json响应。 下面是来自请求的json响应示例(我只为items显示了两个元素) 以下是我试图验证的方式: 但是,我得到了一个断言错误:
下面是用于匹配的json示例;匹配包含不起作用。 它的投掷低于错误,