我试图为下面的响应编写JSON模式。响应是动态的它可以是人
细节或组织
细节。如果响应中的CusterType
是人
,那么响应将包含人对象(组织对象将不可用)。如果CusterType
是org
,组织详细信息将包含在响应中(人对象将不可用)。下面给出了两种不同的预期反应
{
"customerType" : "person",
"person" : {
"fistName" : "A",
"lastName" : "B"
},
"id" : 1,
"requestDate" : "2021-11-11"
}
{
"customerType" : "org",
"organization" : {
"orgName" : "A",
"orgAddress" : "B"
},
"id" : 2,
"requestDate" : "2021-11-11"
}
我试图使用下面给出的模式使上述条件有效
{
"customerType" : "#string",
"organization" : "#? karate.match(response.customerType, 'org').pass ? karate.match(_, organizationSchema).pass : true)",
"person" : "#? karate.match(response.customerType, 'person').pass ? karate.match(_, personSchema).pass : true"),
"id" : "#number",
"requestDate" : "#string"
}
我目前面临的问题是,如果响应中的customerType
是person
,它会抛出以下错误
all key-values did not match, expected has un-matched keys: [organization]
是否有任何方法可以在模式中指定,如果person对象可用,则organization对象将不可用,反之亦然
如果你坚持在一个“单一”的模式中做这件事,那么空手道就不是你的工具。否则,请继续阅读。
空手道鼓励重用图式“块”。这里有两种可能的解决方案来满足您的需求。我希望你做更多的阅读,你可以嵌入JS在空手道脚本,操纵JSON之前做一个匹配,甚至有方法合并JSON使用karate.merge()
,如果你真的很喜欢。您不需要总是做"精确"匹配,有时包含
可以很好地完成工作。
* def personSchema = { firstName: '#string', lastName: '#string' }
* def orgSchema = { orgName: '#string', orgAddress: '#string' }
* def schema = { customerType: '#string', id: '#number' }
* def response1 = { customerType: 'person', person: { firstName: 'Foo', lastName: 'Bar' }, id: 1 }
* match response1 contains schema
* def extra = response1.person ? { person: '#(personSchema)' } : { organization: '#(orgSchema)' }
* match response1 contains extra
* def response2 = { customerType: 'org', organization: { orgName: 'Foo', orgAddress: 'Bar' }, id: 2 }
* if (response2.person) schema.person = personSchema; else schema.organization = orgSchema
* match response2 == schema
尽管如此,我强烈反对这种“聪明”的测试,它只会导致可维护性问题。请尽可能地坚持简单的场景,并设置您的测试/请求,以便您100%知道响应将是什么。请花点时间阅读以下内容:https://stackoverflow.com/a/50350442/143475
我只是想知道如何进行条件模式验证。API响应是基于键的动态响应。如果是,那么,人的详细信息将被包括,如果是组织的详细信息将被包括在JSON响应中。所以响应可以是以下任何一种形式 我为验证上述2个场景而创建的架构如下 但是架构与实际响应不匹配。我应该对架构进行哪些更改才能使其工作?
我一直在用这种东西。 预期的反应有两种可能的结果,我想断言,如果我们得到其中任何一种,测试应该通过。 第一 第二 如果我们在响应中得到它们中的任何一个,测试/模式应该通过。如何在同一个模式中断言这两个场景?任何帮助都非常感谢。谢谢!
早上好 我刚刚开始使用JSON,所以我知道这是一个非常基本的问题,有人能指出我在尝试验证下面的事件和问题ID方面的错误吗? id字段似乎已成功验证,但我的文件在尝试验证时失败。
我正在使用空手道验证GET请求的整个json响应。 下面是来自请求的json响应示例(我只为items显示了两个元素) 以下是我试图验证的方式: 但是,我得到了一个断言错误:
我一直在验证下面的回答。 当我使用空手道发出获取请求时,我会得到以下响应,我想验证它。 我试过: 它说它不是字符串。你能帮我确认一下这个请求吗?
我试图用空手道验证响应模式,但数组存在问题。附加响应和功能以及my schema.json。 回应- } responseSchema.json {"页面":"#编号","per_page":"#编号","总计":"#编号","total_pages":"#编号","数据": "#[] #对象","支持":"#对象"}