JMeter如何将毫秒响应时间转秒并保留三位小数输出至邮件正文
JMeter 响应时间邮件展示精度调整方案
问题根源
prev.getTime() 方法返回的是long类型的毫秒整数,你原脚本中直接和整数1000做除法时会优先执行整数运算,直接丢弃小数部分后再转换为float类型,因此最终结果只有整数位,小数位固定为.0。
调整方法
直接修改BeanShell PostProcessor中的脚本即可,邮件正文的取值函数不需要改动,有两种可选实现:
方案1:最简修改
将除数改为浮点数1000.0,触发浮点数除法保留小数:
<BeanShellPostProcessor guiclass="TestBeanGUI" testclass="BeanShellPostProcessor" testname="BeanShell PostProcessor" enabled="true"> <boolProp name="resetInterpreter">false</boolProp> <stringProp name="parameters"></stringProp> <stringProp name="filename"></stringProp> <stringProp name="script">float duration = prev.getTime()/1000.0; props.put("getDTS_response", String.valueOf(duration));</stringProp> </BeanShellPostProcessor>
方案2:固定保留3位小数(更稳妥)
引入格式化工具固定输出三位小数,避免浮点数转字符串时出现多余无效位数:
<BeanShellPostProcessor guiclass="TestBeanGUI" testclass="BeanShellPostProcessor" testname="BeanShell PostProcessor" enabled="true"> <boolProp name="resetInterpreter">false</boolProp> <stringProp name="parameters"></stringProp> <stringProp name="filename"></stringProp> <stringProp name="script">import java.text.DecimalFormat; long responseTimeMs = prev.getTime(); float duration = responseTimeMs / 1000.0f; DecimalFormat decimalFormat = new DecimalFormat("0.000"); props.put("getDTS_response", decimalFormat.format(duration));</stringProp> </BeanShellPostProcessor>
补充说明
如果你使用的是JMeter 3.1及以上版本,更推荐使用JSR223 PostProcessor替代BeanShell PostProcessor,执行性能更高,上述脚本代码可直接复用无需修改。
内容的提问来源于stack exchange,提问作者Hasham
相关产品推荐
相关产品推荐

