You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JMeter的__RandomDate()生成仅工作日日期?

解决JMeter生成仅工作日随机日期的问题

方法一:先生成随机日期再调整为工作日

  1. 用__RandomDate()生成初始随机日期并存入变量:

    ${__RandomDate(yyyy-MM-dd,2024-01-01,2024-12-31,randomDate,)}
    

    可根据需求修改日期范围和格式,生成的日期会存在randomDate变量中。

  2. 在API请求前添加JSR223 PreProcessor,用Groovy代码调整日期:

    import java.time.LocalDate
    import java.time.format.DateTimeFormatter
    
    // 读取已生成的随机日期
    def rawDate = vars.get("randomDate")
    def formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
    def date = LocalDate.parse(rawDate, formatter)
    
    // 判断是否为周末并调整
    def dayOfWeek = date.getDayOfWeek().getValue()
    if (dayOfWeek == 6) {
        // 周六调整为前一天(周五)
        date = date.minusDays(1)
    } else if (dayOfWeek == 7) {
        // 周日调整为后一天(周一)
        date = date.plusDays(1)
    }
    
    // 将调整后的工作日存入新变量
    vars.put("workdayDate", date.format(formatter))
    
  3. 在API请求参数中直接使用${workdayDate}即可。

方法二:直接生成工作日(无需后续调整)

如果不想先生成随机日期再调整,可直接在JSR223元件中生成仅包含工作日的随机日期:

import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.util.Random

// 定义日期范围
def startDate = LocalDate.of(2024, 1, 1)
def endDate = LocalDate.of(2024, 12, 31)
def random = new Random()
def workdayDate = null

// 循环生成直到得到工作日
while (workdayDate == null) {
    long daysRange = java.time.temporal.ChronoUnit.DAYS.between(startDate, endDate)
    long randomDays = random.nextLong(daysRange + 1)
    def candidate = startDate.plusDays(randomDays)
    def dayOfWeek = candidate.getDayOfWeek().getValue()
    // 周一到周五(对应数值1-5)才保留
    if (dayOfWeek >= 1 && dayOfWeek <= 5) {
        workdayDate = candidate
    }
}

// 存入变量供API请求使用
vars.put("workdayDate", workdayDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))

关于__time(EEE,)的局限

__time(EEE,)函数只能基于当前系统时间获取星期,没有参数支持解析自定义日期字符串,所以无法直接处理__RandomDate()生成的变量日期,必须通过JSR223中的日期解析API来实现需求。

内容的提问来源于stack exchange,提问作者user23667974

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:17:10