JMeter JSR223 PreProcessor格式化__RandomDate结果为1970年问题求助
问题原因
__RandomDate函数默认返回的是yyyy-MM-dd格式的字符串,而非java.util.Date类型对象。你直接将字符串传入SimpleDateFormat.format()方法时,方法会尝试将字符串强转为long类型时间戳,转换失败后默认取时间戳0,对应日期就是1970年1月1日。- JSR223脚本中不推荐直接使用
${}语法引用JMeter函数,易出现变量解析异常、脚本缓存失效的问题,同时会降低脚本执行性能。
解决方案
方案一:直接使用__RandomDate函数自带参数实现(无需编写JSR223代码)
__RandomDate函数的第一个参数支持自定义输出日期格式,你可以直接调用如下函数,即可将格式为dd/MM/yyyy的随机日期直接存入myFutureDate变量:
${__RandomDate(dd/MM/yyyy,2021-10-20,2021-11-20,myFutureDate,)}
方案二:JSR223脚本中使用Java原生API生成(兼容性和稳定性更高)
推荐使用Java 8+提供的java.time时间API实现随机日期生成,完全不依赖JMeter内置函数,避免解析问题:
import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.concurrent.ThreadLocalRandom; // 指定起止日期 LocalDate start = LocalDate.of(2021, 10, 20); LocalDate end = LocalDate.of(2021, 11, 20); // 生成区间内随机日期 long randomDayOffset = ThreadLocalRandom.current().nextLong(start.toEpochDay(), end.toEpochDay() + 1); LocalDate randomDate = LocalDate.ofEpochDay(randomDayOffset); // 格式化后存入JMeter变量 DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); vars.put("myFutureDate", randomDate.format(outputFormatter));
内容的提问来源于stack exchange,提问作者Gökhan Uçar
相关产品推荐
相关产品推荐

