JMeter使用Beanshell预处理器存日期变量时vars.putObject报错
错误产生原因
你的代码一共有两处问题,直接触发报错的是第二点:
- 类型声明错误:
String.split()方法返回值是字符串数组(String[]),你用单个String类型去接收返回值本身不符合语法规范,脚本运行到这行就会先触发类型不匹配问题。 - 未定义变量引用:你调用
vars.putObject("final_sending_date",final_date);只是把值存入了JMeter的变量空间,并不会自动在当前Groovy脚本里生成名为final_sending_date的局部变量。下一行log.info(final_sending_date);直接引用这个不存在的局部变量,Groovy引擎找不到对应属性,就会抛出你看到的MissingPropertyException错误。
*额外说明:你要存储的final_date是普通字符串类型,用vars.put()即可,不需要调用putObject()方法。
修复方案
按照以下规则修改脚本即可:
- 把接收split返回值的变量类型改为
String[]数组类型 - 给局部变量
final_date补充类型声明,Groovy虽然支持动态类型,但显式声明可以避免很多隐式错误 - 日志打印时不要引用不存在的
final_sending_date变量,直接打印已定义的局部变量,或者从JMeter变量空间中读取对应值再打印 - 存储字符串类型JMeter变量时替换为
vars.put()方法
修复后的可运行代码如下:
String a = vars.get("some_date"); String[] b = a.split("T"); log.info("分割得到的年月日部分:" + b[0]); String final_date = b[0]; vars.put("final_sending_date", final_date); // 打印验证存储结果 log.info("最终存入的final_sending_date值为:" + vars.get("final_sending_date"));
运行后你就可以在JMeter变量中拿到值为2022-06-5的final_sending_date变量,供后续取样器调用。
内容的提问来源于stack exchange,提问作者user18585713
相关产品推荐
相关产品推荐

