Karate如何统计列表元素出现次数并打印对应计数值
Karate 框架实现列表元素频次统计方案
Karate 原生兼容 JavaScript 语法,无需引入额外依赖,直接通过嵌入 JS 逻辑即可快速实现列表元素出现次数统计,以下是可直接复用的实现代码:
基础统计实现
# 定义待统计的目标列表 * def A = ['a', 'a', 'a', 'b', 'b', 'c'] # 定义通用频次统计函数 * def countElementFreq = """ function(targetList) { const freqMap = {}; // 遍历列表累加计数 for (const element of targetList) { freqMap[element] = (freqMap[element] || 0) + 1; } return freqMap; } """ # 执行统计,结果为键值对结构:{a: 3, b: 2, c: 1} * def freqResult = countElementFreq(A) # 直接打印统计结果 * print '各元素出现次数:', freqResult
统计得到的freqResult是标准键值对对象,可以直接用于后续接口断言、参数传递,比如要校验a的出现次数为3,直接写断言* match freqResult.a == 3即可。
格式化输出为指定字符串格式
如果需要输出a=3, b=2 and c=1这类自定义格式的打印内容,追加以下格式化逻辑即可:
* def formatFreqStr = """ function(freqMap) { const entryList = Object.entries(freqMap); return entryList.map(([key, count], index) => { // 倒数第二个元素后拼接and if (index === entryList.length - 2) return `${key}=${count} and `; // 最后一个元素直接拼接键值 if (index === entryList.length - 1) return `${key}=${count}`; // 其他元素后拼接逗号分隔 return `${key}=${count}, `; }).join(''); } """ * def outputStr = formatFreqStr(freqResult) # 控制台将打印:a=3, b=2 and c=1 * print outputStr
适配扩展
- 如果需要统计列表中复杂对象的某字段出现频次,只需要修改计数逻辑中的key取值即可,比如统计用户id的出现次数,将
freqMap[element]替换为freqMap[element.userId]即可适配 - 如果列表中存在
null、undefined等特殊值,默认会转为对应字符串作为统计key,有特殊分类需求可以在遍历逻辑中增加自定义判断处理
内容的提问来源于stack exchange,提问作者Vignesh Gangathara Rao
相关产品推荐
相关产品推荐

