如何在Karate中比较键名/数量不同的两个JSON数组?
解决Karate框架中跨Feature文件比对不同键名JSON数组的问题
你当前的问题是用call方法直接传入两个数组时,无法在子Feature中逐个获取对象进行校验。可以通过以下两种方式实现:
方式一:将两个数组打包成单个对象传递
在主Feature中把两个数组封装到一个对象里,子Feature中遍历这个对象的两个数组,逐个比对元素。
主Feature(sample-create.feature)修改:
* table kittens1 | name | age | dept| | 'Bob' | 2 | IT. | | 'Wild' | 1 | HR. | | 'Nyan' | 3 |ADMIN| * table kittens2 | first_name | emp_age | | 'Bob' | "2" | | 'Wild' | "1" | | 'Nyan' | "3" | * def data = { list1: kittens1, list2: kittens2 } * def result = call read('cat-create.feature') data
子Feature(cat-create.feature)修改:
@ignore Feature: Scenario: * def zip = function(a, b) { return karate.zip(a, b) } * def pairs = zip(data.list1, data.list2) * pairs.forEach(function(pair){ var obj1 = pair[0] var obj2 = pair[1] karate.assert(obj2.first_name == obj1.name) karate.assert(parseInt(obj2.emp_age) == obj1.age) })
方式二:在主Feature中遍历数组,逐个调用子Feature校验
如果需要更细粒度的控制,可以在主Feature中遍历两个数组的元素对,每次调用子Feature传递一组对象进行校验。
主Feature(sample-create.feature)修改:
* table kittens1 | name | age | dept| | 'Bob' | 2 | IT. | | 'Wild' | 1 | HR. | | 'Nyan' | 3 |ADMIN| * table kittens2 | first_name | emp_age | | 'Bob' | "2" | | 'Wild' | "1" | | 'Nyan' | "3" | * def pairs = karate.zip(kittens1, kittens2) * pairs.forEach(function(pair){ call read('cat-create.feature') pair[0] pair[1] })
子Feature(cat-create.feature)修改:
@ignore Feature: Scenario: * assert first_name == name * assert parseInt(emp_age) == age
这两种方式都能实现你需要的跨Feature文件逐个比对不同键名JSON对象的需求,第一种适合批量处理,第二种适合单元素的独立校验逻辑。
内容的提问来源于stack exchange,提问作者Arpit Aggarwal
相关产品推荐
相关产品推荐

