JMeter BeanShell后置处理器__time函数返回结果异常求助
解决JMeter BeanShell后置处理器中__time函数返回1996的问题
嘿,我完全懂你遇到的糟心问题!你看到的1996可不是什么诡异的bug,而是BeanShell在“自作聪明”——它把${__time(yyyy-MM-dd)}输出的日期字符串(比如2018-03-19)当成了算术表达式,直接执行了减法:2018 - 3 - 19 = 1996,这就是为啥结果是个数字而非正确的日期字符串。
下面给你几个靠谱的解决方案,按推荐程度排序:
方案1:用Java原生日期类(BeanShell里最稳妥的写法)
直接在BeanShell里通过Java日期API生成当前日期,完全避开JMeter函数的表达式解析坑,代码如下:
import java.text.SimpleDateFormat; import java.util.Date; // 定义你需要的日期格式 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); // 获取当前日期并格式化 String currentDate = dateFormat.format(new Date()); // 如果需要把结果存到JMeter变量供其他组件使用 vars.put("current_date", currentDate);
方案2:先存变量再读取(适配现有代码的简便写法)
- 先在测试计划中添加用户定义变量(或前置处理器),新增变量比如
current_date,变量值填${__time(yyyy-MM-dd)} - 在你的BeanShell后置处理器里,通过
vars.get()方法安全获取变量值:
String currentDate = vars.get("current_date"); // 后续直接用currentDate即可,它就是正确的日期字符串
方案3:给__time结果加引号(临时应急写法)
如果你不想大改现有代码,可以给__time的结果套上引号,明确告诉BeanShell这是字符串而非算术表达式:
// 用单引号包裹 String currentDate = '${__time(yyyy-MM-dd)}'; // 或者转义双引号 String currentDate = "\"${__time(yyyy-MM-dd)}\"";
额外推荐:改用JSR223后置处理器+Groovy脚本
从JMeter 3.1开始,官方就推荐用JSR223元素替代BeanShell了,Groovy性能更好、语法更简洁,还不会出现这种表达式解析的问题:
// Groovy里一行就能搞定日期生成 def currentDate = new Date().format("yyyy-MM-dd") vars.put("current_date", currentDate)
随便选一种方案都能解决你的问题,个人优先推荐方案1或者JSR223的写法,稳定性和可读性都更高~
内容的提问来源于stack exchange,提问作者Praveen PS
相关产品推荐
相关产品推荐

