JMeter 时间函数合集

一、JMeter 内置时间函数

1. __time 函数

最常用的时间函数,返回当前时间戳

java

复制代码
// 格式:${__time(格式, 变量名)}
${__time()}                    // 毫秒时间戳(默认)
${__time(/1000,)}              // 秒时间戳
${__time(yyyy-MM-dd,)}         // 日期:2024-01-15
${__time(HH:mm:ss,)}           // 时间:14:30:25
${__time(yyyyMMddHHmmss,)}     // 完整:20240115143025
${__time(yyyy-MM-dd HH:mm:ss,)} // 标准格式
${__time(,timestamp)}          // 保存到变量

2. __timeShift 函数(JMeter 5.3+)

时间偏移计算

java

复制代码
// 格式:${__timeShift(格式, 日期, 偏移量, 语言环境, 变量名)}
${__timeShift(yyyy-MM-dd, P1D)}           // 明天
${__timeShift(yyyy-MM-dd, P-1D)}          // 昨天
${__timeShift(yyyy-MM-dd, P1M)}           // 下个月
${__timeShift(yyyy-MM-dd HH:mm:ss,, P2DT1H30M)} // 2天1小时30分钟后
${__timeShift(yyyy-MM-dd,, -P1D,, dateVar)} // 昨天保存到变量

3. __RandomDate 函数

生成随机日期

java

复制代码
// 格式:${__RandomDate(格式, 开始日期, 结束日期, 变量名)}
${__RandomDate(yyyy-MM-dd, 2024-01-01, 2024-12-31)}
${__RandomDate(,,2024-12-31,randomDate)} // 默认格式,保存到变量

二、日期格式说明

常用格式符

java

复制代码
yyyy - 年份(2024)
MM   - 月份(01-12)
dd   - 日期(01-31)
HH   - 24小时制小时(00-23)
mm   - 分钟(00-59)
ss   - 秒(00-59)
SSS  - 毫秒(000-999)
E    - 星期几(Mon, Tue...)

时间段偏移格式

java

复制代码
P    - 时间段标识
D    - 天
M    - 月
Y    - 年
T    - 时间分隔符
H    - 小时
M    - 分钟
S    - 秒

示例:
P1D     - 1天
P-2DT3H - 减2天加3小时
PT1H30M - 1小时30分钟

三、通过 JSR223 生成时间

1. Groovy 脚本(推荐)

groovy

复制代码
// 当前时间戳
def timestamp = System.currentTimeMillis()

// 格式化日期
import java.text.SimpleDateFormat
def sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
def now = sdf.format(new Date())

// 日期计算
import java.time.*
def tomorrow = LocalDate.now().plusDays(1).toString()
def nextHour = LocalDateTime.now().plusHours(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))

// 随机日期
def random = new Random()
def randomDay = LocalDate.now().plusDays(random.nextInt(30))

vars.put("currentTime", now)
vars.put("tomorrow", tomorrow)

2. Beanshell 脚本

java

复制代码
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

// 获取当前时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentTime = sdf.format(new Date());

// 时间加减
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, -1); // 昨天
String yesterday = sdf.format(cal.getTime());

vars.put("currentTime", currentTime);
vars.put("yesterday", yesterday);

四、实际应用示例

1. 请求参数中使用时间

java

复制代码
// HTTP请求参数
startTime=${__time(yyyy-MM-dd 00:00:00,)}
endTime=${__time(yyyy-MM-dd 23:59:59,)}
randomDate=${__RandomDate(yyyy-MM-dd,,2024-12-31,)}

// JSON请求体
{
  "timestamp": "${__time(/1000,)}",
  "date": "${__time(yyyy-MM-dd,)}",
  "expireDate": "${__timeShift(yyyy-MM-dd, P30D)}"
}

2. 文件名包含时间戳

java

复制代码
// 保存结果文件
C:/results/test_${__time(yyyyMMdd_HHmmss,)}.jtl

// 保存响应数据
response_${__time(yyyyMMddHHmmss,)}.json

3. 时间断言

java

复制代码
// 响应时间断言
${__timeShift(yyyy-MM-dd,, P1D,, tomorrow)}
// 检查响应是否包含明天日期

4. 动态时间范围查询

java

复制代码
// 查询最近7天数据
startDate=${__timeShift(yyyy-MM-dd, P-7D)}
endDate=${__time(yyyy-MM-dd)}

// 或者使用变量
${__timeShift(yyyy-MM-dd, P${dayOffset}D)}

五、高级技巧

1. 时区处理

groovy

复制代码
// Groovy脚本设置时区
def sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"))
def beijingTime = sdf.format(new Date())

2. 性能测试中的时间同步

java

复制代码
// 使用同步定时器确保时间准确
// 配合 __time 函数使用

3. 时间变量在循环中的使用

java

复制代码
// 每次循环使用不同时间
${__timeShift(yyyy-MM-dd, P${__iterationNum}D)}

六、注意事项

  1. 线程安全:内置函数是线程安全的,自定义脚本需要注意

  2. 性能:JSR223 脚本建议使用 Groovy,性能更好

  3. 格式一致性:确保前后端时间格式一致

  4. 时区问题:分布式测试时注意服务器时区

  5. 缓存:时间函数每次调用都会重新计算

七、调试技巧

  1. 使用 Debug Sampler 查看时间变量值

  2. View Results Tree 中检查替换结果

  3. 使用 ${__log()} 函数记录时间值

java

复制代码
${__log(${__time(yyyy-MM-dd HH:mm:ss,)},)}

这些时间函数可以灵活组合使用,满足大多数性能测试场景中对时间的需求。

相关推荐
Boilermaker19921 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
沈浩(种子思维作者)1 小时前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
MM_MS1 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
꧁Q༒ོγ꧂2 小时前
LaTeX 语法入门指南
开发语言·latex
njsgcs2 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
alonewolf_992 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
io_T_T2 小时前
迭代器 iteration、iter 与 多线程 concurrent 交叉实践(详细)
python
古城小栈2 小时前
Rust 迭代器产出的引用层数——分水岭
开发语言·rust
华研前沿标杆游学2 小时前
2026年走进洛阳格力工厂参观游学
python
Carl_奕然2 小时前
【数据挖掘】数据挖掘必会技能之:A/B测试
人工智能·python·数据挖掘·数据分析