如何在K6本地测试中统计指定请求的平均与最大响应时间?
在K6本地统计特定请求的平均/最大响应时间
不用自己手动累加计算,K6本身就有更简单可靠的方式来统计特定请求的响应时间指标,同时手动实现也可行但并非最优解,下面分两种方式说明:
推荐方式:使用K6自定义Trend指标
K6的Trend指标专门用来跟踪数值型数据的分布,会自动帮你计算平均值、最大值、中位数、百分位数等,完全适配多VU场景的聚合统计,步骤如下:
- 在脚本顶部定义自定义Trend指标:
import http from 'k6/http'; import { Trend } from 'k6/metrics'; // 给目标请求创建专属的Trend指标,命名要清晰 const targetReqDuration = new Trend('target_request_duration');
- 发送目标请求后,将响应时长传入这个指标:
export default function () { // 其他无关请求 http.get('https://your-domain.com/other-api'); // 你要统计的特定请求 const res = http.get('https://your-domain.com/target-api'); // 将该请求的响应时长添加到自定义指标中 targetReqDuration.add(res.timings.duration); // 其他无关请求 http.get('https://your-domain.com/another-api'); }
- 本地运行测试后,在命令行的Summary区块里,就能直接看到这个指标的统计结果,比如:
target_request_duration.....: avg=185.2ms max=620.7ms med=160.3ms p(95)=410.5ms p(99)=580.1ms
这里的avg就是平均响应时间,max就是最大响应时间,直接取用即可。
如果需要把结果导出到文件分析,可以加--out参数,比如:
k6 run your-script.js --out json=test-results.json
之后从生成的JSON文件里,就能提取到target_request_duration对应的各项统计值。
手动累加计算(不推荐)
你提到的自行累加计算是可行的,但需要处理多VU之间的指标聚合问题——每个VU的变量是隔离的,不能直接用普通全局变量累加。需要结合Counter(统计请求次数)、Sum(统计总时长)、Gauge(记录最大值)来实现:
import http from 'k6/http'; import { Counter, Sum, Gauge } from 'k6/metrics'; const reqCount = new Counter('target_req_count'); const totalDuration = new Sum('target_total_duration'); const maxDuration = new Gauge('target_max_duration'); export default function () { const res = http.get('https://your-domain.com/target-api'); const duration = res.timings.duration; reqCount.add(1); totalDuration.add(duration); // 更新最大值 if (duration > maxDuration.value) { maxDuration.add(duration); } }
运行后,你需要用total_duration的总和除以req_count的次数得到平均值,max_duration就是最大值。但这种方式需要手动计算,而且Gauge记录最大值在高并发场景下可能有精度问题,远不如Trend指标省心准确。
总结:手动累加不是唯一方法,也不是最优方法,优先用K6内置的自定义Trend指标来实现,简单可靠且统计准确。
内容的提问来源于stack exchange,提问作者user637338
相关产品推荐
相关产品推荐

