如何在JMeter中捕获curl手册定义的HTTP请求时间参数
在JMeter中捕获curl风格的请求时序指标并生成报表
需求说明
从指定URL获取文件时,需要捕获以下时序指标:
- DNS解析时间(
time_namelookup) - 连接建立时间(
time_connect) - TLS握手完成时间(
time_appconnect) - HTTP请求开始传输前时间(
time_pretransfer) - HTTP响应开始传输时间(
time_starttransfer) - HTTP响应完成总时间(
time_total)
现有curl实现方式
你已能通过Mac终端的curl命令捕获这些指标,命令如下:
curl -w "@curl-format.txt" -o /dev/null -s "https:///large5-1663346153.bmp"
对应的curl-format.txt内容为:
time_namelookup: %{time_namelookup}s time_connect: %{time_connect}s time_appconnect: %{time_appconnect}s time_pretransfer: %{time_pretransfer}s time_redirect: %{time_redirect}s time_starttransfer: %{time_starttransfer}s ---------- time_total: %{time_total}s
在JMeter中实现的步骤
1. 配置HTTP请求采样器
- 添加线程组:右键测试计划→「添加」→「Threads(Users)」→「线程组」
- 添加HTTP请求:右键线程组→「添加」→「取样器」→「HTTP请求」
- 配置请求参数:填入目标URL,请求方法选择GET
2. 提取时序指标
JMeter的HTTP采样器内置了这些时序数据,可通过两种方式提取:
直接使用内置变量
每个HTTP请求完成后,可直接引用以下内置变量获取对应指标(单位:秒):
- DNS解析时间:
${JMeterThread.last_sample.time_namelookup} - 连接建立时间:
${JMeterThread.last_sample.time_connect} - TLS握手时间:
${JMeterThread.last_sample.time_appconnect} - 请求预传输时间:
${JMeterThread.last_sample.time_pretransfer} - 响应开始传输时间:
${JMeterThread.last_sample.time_starttransfer} - 总请求时间:
${JMeterThread.last_sample.time_total}
用JSR223后置处理器提取为自定义变量
若需要将指标保存为可复用的变量,添加JSR223后置处理器:
- 右键HTTP请求→「添加」→「后置处理器」→「JSR223后置处理器」
- 在脚本框中输入Groovy代码(将毫秒转换为秒,和curl格式一致):
def sampleResult = ctx.getCurrentSampler().getSampleResult() // 提取并保存各指标为变量 vars.put("time_namelookup", String.valueOf(sampleResult.getTimeNamelookup() / 1000)) vars.put("time_connect", String.valueOf(sampleResult.getTimeConnect() / 1000)) vars.put("time_appconnect", String.valueOf(sampleResult.getTimeAppConnect() / 1000)) vars.put("time_pretransfer", String.valueOf(sampleResult.getTimePreTransfer() / 1000)) vars.put("time_starttransfer", String.valueOf(sampleResult.getTimeStartTransfer() / 1000)) vars.put("time_total", String.valueOf(sampleResult.getTime() / 1000))
3. 生成包含指标的报表
实时查看指标
添加「查看结果树」监听器,选择「Sampler Result」标签,可直接看到包含所有时序指标的详细信息。
导出为CSV文件
添加「简单数据写入器」:
- 右键线程组→「添加」→「监听器」→「简单数据写入器」
- 设置输出文件路径(如
timing-results.csv) - 勾选「自定义字段」,输入要保存的变量名:
time_namelookup,time_connect,time_appconnect,time_pretransfer,time_starttransfer,time_total - 运行测试后,CSV文件会记录每一次请求的时序数据,方便后续分析。
生成自定义HTML报表
若需要可视化报表,可修改JMeter的报表模板:
- 复制JMeter安装目录下的
report-template文件夹,修改模板文件(如summary.tpl),添加对应指标的展示代码 - 运行测试生成JTL结果文件后,执行以下命令生成自定义报表:
jmeter -g 测试结果.jtl -o 报表输出目录 -t 自定义模板路径
内容的提问来源于stack exchange,提问作者R.Srivastava
相关产品推荐
相关产品推荐

