如何从JMeter的Sampler result选项卡提取Sample start日期时间值
JMeter提取Sample Start时间值的实现方案
有3种可直接落地的实现方式,你可以根据自己的使用场景选择:
- 正则表达式提取器(通用方案,适合需要把值存为JMeter变量复用的场景)
给目标取样器添加正则表达式提取器后置处理器,按以下参数配置即可:- 引用名称:自定义变量名,例如
sample_start_time,后续可通过${sample_start_time}调用提取到的值 - 正则表达式:
Sample Start:(.*?)\n - 模板:
$1$ - 匹配数字:
1(取第一个匹配结果) - 缺省值:可自定义提取失败时的返回值,例如
extract_error
该正则会直接匹配Sample Start:字段后到换行符前的所有内容,也就是你需要的完整日期时间字符串,和给出的示例片段完全适配。
- 引用名称:自定义变量名,例如
- JSR223后置处理器(性能最优,适合需要对时间做二次处理的场景)
如果需要对提取到的时间做格式转换、时区换算、时间差计算,直接给目标取样器添加JSR223后置处理器,选择Groovy作为脚本语言,写入以下代码即可:
这种方式直接调用JMeter内置的SampleResult对象的官方API,比正则匹配更稳定,不会因为取样器结果的文本排版调整出现匹配失效问题,Groovy脚本的执行性能也远高于其他脚本语言。// 直接获取取样器结果里的Sample Start字符串值 String sampleStartStr = prev.getStartTimeString(); // 将值存入JMeter变量,供后续元件调用 vars.put("sample_start_time", sampleStartStr); // 如果需要毫秒级时间戳做计算,直接调用getTime方法即可,无需解析字符串 // long sampleStartTs = prev.getStartTime(); - 结果文件配置(适合批量导出所有取样器开始时间的场景)
如果是需要在测试结果里批量统计所有请求的Sample Start值,不需要逐个取样器加提取元件,直接修改JMeter安装目录下的jmeter.properties配置文件:- 找到
jmeter.save.saveservice.timestamp_format配置项,设置值为yyyy-MM-dd HH:mm:ss z,和取样器页面显示的时间格式保持一致 - 确认
jmeter.save.saveservice.print_field_names配置为true
配置修改后重启JMeter,跑测试生成的jtl结果文件里会自带每个取样器的开始时间字段,直接用Excel或者文本工具就能批量读取。
- 找到
注意:示例结果里的时间带IST时区标识(印度标准时间,UTC+5:30),如果需要换算成其他时区的时间,建议在JSR223脚本里用Groovy内置的时间日期API处理,不要直接截取字符串修改,容易出现时间计算偏差。
内容的提问来源于stack exchange,提问作者Pratik Dey
相关产品推荐
相关产品推荐

