You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:03:23