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

如何合并非Grafana云环境下10个独立k6实例的测试汇总?

合并多个独立k6测试实例的汇总结果方法

当然可以合并,核心思路是利用k6输出的结构化数据做聚合处理,以下是两种实用方案:

1. 基于JSON输出的手动脚本聚合

这是最直接的方案,适合你已经拿到10份结果的场景:

  • 第一步:确保结果是结构化格式
    如果之前的测试没输出JSON,重新运行每个实例时加上参数:k6 run script.js --out json=result-{index}.json(把{index}换成1到10的编号),生成包含完整指标的JSON文件。

  • 第二步:编写聚合脚本
    用Python、Node.js等语言写简单脚本,对所有JSON结果做指标聚合:

    • 计数类指标(请求数、错误数、HTTP状态码次数):直接累加
    • 数值类指标(响应时间、延迟):累加总和、更新最大/最小值,按请求数加权计算百分位数和平均值
    • 状态类指标(最大并发数vus_max):取所有实例中的最大值

    以下是Python的极简示例脚本:

    import json
    import glob
    
    # 加载所有结果文件
    result_files = glob.glob("result-*.json")
    all_results = [json.load(open(f)) for f in result_files]
    
    aggregated = {}
    for res in all_results:
        # 遍历每个指标
        for metric_name, data in res["metrics"].items():
            if metric_name not in aggregated:
                # 初始化指标结构
                aggregated[metric_name] = {
                    "count": 0,
                    "sum": 0,
                    "min": float("inf"),
                    "max": float("-inf"),
                    "percentiles": {}
                }
            # 累加计数和总和
            aggregated[metric_name]["count"] += data["count"]
            aggregated[metric_name]["sum"] += data["sum"]
            # 更新极值
            aggregated[metric_name]["min"] = min(aggregated[metric_name]["min"], data["min"])
            aggregated[metric_name]["max"] = max(aggregated[metric_name]["max"], data["max"])
            # 加权处理百分位数
            for pct, val in data["percentiles"].items():
                if pct not in aggregated[metric_name]["percentiles"]:
                    aggregated[metric_name]["percentiles"][pct] = 0
                aggregated[metric_name]["percentiles"][pct] += val * data["count"]
    
    # 计算最终的平均值和加权百分位数
    for metric in aggregated.values():
        if metric["count"] > 0:
            metric["avg"] = metric["sum"] / metric["count"]
            for pct in metric["percentiles"]:
                metric["percentiles"][pct] /= metric["count"]
    
    # 输出合并后的JSON结果
    print(json.dumps(aggregated, indent=2))
    

2. 提前规划:用k6分布式测试(如果后续还要跑)

如果之后还要做类似的多实例测试,不用事后合并,直接用k6的分布式运行模式:

  • 启动一个主节点,然后将10个实例作为工作节点连接到主节点
  • 主节点会自动收集所有工作节点的指标,直接输出一份合并后的汇总结果,无需手动处理

注意:百分位数不能直接取各实例百分位数的平均值,必须按请求数加权计算,否则结果会失真。

内容的提问来源于stack exchange,提问作者noamtm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:46:04