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

K6中向空数组添加元素计算请求平均传输时间失败问题排查

解决K6中全局数组在teardown函数中为空的问题

问题原因

K6的每个虚拟用户(VU)运行在独立的内存沙箱中,你定义的全局transferTimes数组仅存在于单个VU的内存空间内,而teardown函数是在K6的主进程中执行的,无法直接访问各个VU内存中的变量,因此会出现数组长度为0的情况。

解决方案

使用K6提供的**自定义趋势指标(Trend)**来收集请求耗时数据,Trend指标会自动聚合所有VU的统计数据,主进程(包括teardown函数)可以直接访问这些聚合后的结果。

修改后的完整代码

import http from 'k6/http';
import { sleep } from 'k6';
import { check } from 'k6';
import { Trend } from 'k6/metrics';

export let options = {
  vus: 1, 
  duration: '5s', // 原代码此处缺少引号,属于语法错误,需修正
};

// 定义自定义趋势指标,用于收集传输时间
const transferTimeTrend = new Trend('transfer_time');

export default function () {
  const res = http.get('<url>');    
  check(res, {
    'Successful response': (resp) => resp.status === 200,
  });

  const transferTime = res.timings.duration;
  // 将单请求传输时间添加到趋势指标中
  transferTimeTrend.add(transferTime);
  console.log(`Transfer time: ${transferTime} ms`);
  sleep(1); // 可选,避免请求过于频繁
}

export function teardown() {
  // 从指标中获取聚合后的统计数据
  const stats = metrics.transfer_time;
  console.log(`Average transfer time: ${stats.values.avg.toFixed(6)} ms`);
  console.log(`Min transfer time: ${stats.values.min.toFixed(6)} ms`);
  console.log(`Max transfer time: ${stats.values.max.toFixed(6)} ms`);
}

额外说明

  1. 原代码中options.duration的5s未加引号,属于语法错误,会导致脚本运行失败,已修正为字符串形式'5s'。
  2. Trend指标会自动计算多维度统计值,包括平均值、极值、百分位数(如p90、p95),可直接从stats.values中调用。

运行输出示例

INFO[0001] Transfer time: 1.164713 ms                    source=console
INFO[0002] Transfer time: 1.163952 ms                    source=console
...
INFO[0005] Average transfer time: 1.164333 ms            source=console
INFO[0005] Min transfer time: 1.163952 ms                source=console
INFO[0005] Max transfer time: 1.164713 ms                source=console

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:02:06