求助:使用JSR223 Sampler获取当前日期前的日期列表失败
用JSR223 Sampler生成指定数量的历史日期列表
方案一:生成当前日期前N天的连续日期
如果需要生成当前日期往前推1到10天的日期(如当前是9.7.2022,生成9.6.2022、9.5.2022...共10个),在JSR223 Sampler中选择Groovy语言,使用以下代码:
import java.time.LocalDate import java.time.format.DateTimeFormatter // 定义日期格式:日.月.年 def dateFormat = DateTimeFormatter.ofPattern("d.M.yyyy") def today = LocalDate.now() def numberOfDates = 10 def pastDatesList = [] // 循环生成往前推的日期 for (int daysAgo = 1; daysAgo <= numberOfDates; daysAgo++) { LocalDate pastDate = today.minusDays(daysAgo) pastDatesList.add(pastDate.format(dateFormat)) } // 打印结果到JMeter日志,方便调试 log.info("历史日期列表:" + pastDatesList) // 将结果存入JMeter变量,供后续组件使用(逗号分隔) vars.put("pastDates", pastDatesList.join(","))
方案二:生成当前日期前N个月的同月日期
如果你的需求是像示例那样生成每月同一天的历史日期(如当前是9.7.2022,生成8.7.2022、7.7.2022...共10个),调整代码如下:
import java.time.LocalDate import java.time.format.DateTimeFormatter def dateFormat = DateTimeFormatter.ofPattern("d.M.yyyy") def today = LocalDate.now() def numberOfDates = 10 def pastDatesList = [] for (int monthsAgo = 1; monthsAgo <= numberOfDates; monthsAgo++) { LocalDate pastDate = today.minusMonths(monthsAgo) pastDatesList.add(pastDate.format(dateFormat)) } log.info("历史日期列表:" + pastDatesList) vars.put("pastDates", pastDatesList.join(","))
常见失败原因排查
- 语言选择错误:JSR223 Sampler要选Groovy,不要选JavaScript或其他语言,Groovy对Java日期API支持更友好
- 日期格式不匹配:确保
DateTimeFormatter的格式字符串和你需要的输出一致(示例中是d.M.yyyy,对应日.月.年) - 循环逻辑错误:检查循环次数和日期偏移量,避免包含当前日期或生成数量不对
- 未正确导入类:代码开头必须导入
java.time.LocalDate和java.time.format.DateTimeFormatter,否则会报错
内容的提问来源于stack exchange,提问作者Kumaran
相关产品推荐
相关产品推荐

