假设我有一个回应-杰森(Json)如下图
def resJson =
"""
{
"id": 1,
"code": "OU82883",
"features":
[
{
"id": 12,
"class": "OU8811",
"school": "parent",
"course": "abc",
"sortOrder": 123
}
]
}
"""
为了易于管理文件进行比较,我将预期的模式-预期的结果放置在文件(“ getCourseDetails.txt”)中,结构如下:
{
id: '#number',
code: '#string',
features: ##[{
id: '#number',
class: '##string',
school: '##string',
course: '##string',
sortOrder: '#number'
}
]
}
然后在已执行的功能文件中,将代码执行为
* json expSchema= read ('../Data/Schema/getCourseDetails.txt')
* match resJson == expSchema
系统通知AssertionFailed错误
要找到另一种验证模式的方法,我仅将结构保留在“ getCourseDetails”的“功能”内部。在“功能”之外,我放入了执行的功能文件。所以我的代码现在是:
GetCourseDetails文件:
{
id: '#number',
class: '##string',
school: '##string',
course: '##string',
sortOrder: '#number'
}
功能文件:
* json courseDetails= read ('../Data/Schema/getCourseDetails.txt')
* def expSchema = {id: '#number', code: '#string', features: '##[] courseDetails'}
* match resJson == expSchema
没有错误并且验证效果很好,但是这种方法并不是我所期望的。
我想知道是否有一种方法可以将文件中的所有内容集中化,而用户只需调用文件以根据实际响应的模式进行验证
非常感谢您。
答案 0 :(得分:1)
我认为您过度设计了测试,但是您可以使用JS进行高级设置,并以所需的方式构建模式,并且该模式可以重复使用。例如:
first.json
:
{ "foo": "#string" }
second.json
:
{ "value": "#number" }
schema.js
:
function() {
var first = read('first.json');
karate.set('second', read('second.json'));
first.bar = '##[] second';
return first;
}
现在您的功能文件可以是:
* def schema = call read('schema.js')
* def response = { foo: 'test', bar: [{value: 1}, {value: 2}] }
* match response == schema
以上,如果您* print schema
,您将看到:
{
"foo": "#string",
"bar": "##[] second"
}
如果您想要单线-* match response == call read('schema.js')
应该可以工作!