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,)},)}

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

相关推荐
serve the people2 小时前
tensorflow 深度解析 Sequential 模型的输入形状指定
人工智能·python·tensorflow
麦麦鸡腿堡2 小时前
Java_反射暴破创建对象与访问类中的成员
java·开发语言
不会c嘎嘎2 小时前
深入理解QT之信号和槽
开发语言·qt
SunnyDays10112 小时前
Python 实现 PDF 文档压缩:完整指南
linux·开发语言·python
长安牧笛2 小时前
设计考研党备考开支追踪程序,记录教材,网课,报名费支出,按科目统计花费,优化备考预算分配。
python
Cx330❀2 小时前
《C++ 动态规划》第001-002题:第N个泰波拉契数,三步问题
开发语言·c++·算法·动态规划
神仙别闹2 小时前
基于Qt5(C++)+SQLite 开发的一个小巧精美的本地音乐播放器
开发语言·c++·qt
差点GDP2 小时前
C语言常用编译命令和示例
c语言·开发语言
长空任鸟飞_阿康2 小时前
LangChain 技术栈全解析:从模型编排到 RAG 实战
前端·python·langchain