JMeter的UUID函数、time函数和Random函数是最常用的三个内置函数,用于动态生成唯一标识、时间戳和随机数据,模拟真实请求的参数变化。
1. UUID 函数- __UUID()
作用:生成一个全局唯一的标识符(符合 UUID 标准,如 3b241101-e2bb-4255-8caf-4136c566a962),每次调用都会产生不同的值。
语法:
${__UUID()}
该函数 没有参数,不能像其他函数那样通过变量名参数把结果存入变量。如果需要在同一个请求的多个地方复用同一个 UUID,可将它配合用户自定义变量或前置处理器存入变量:
方法一:使用 BeanShell / JSR223 前置处理器 vars.put("myUUID", UUID.randomUUID().toString()); 然后引用 ${myUUID}。
方法二:如果只是在一次请求中出现多次,可以直接写 ${__UUID()},但每次求值都会生成新 UUID,并不相同。
场景:
模拟订单号、流水号、唯一会话 ID;
注册时生成唯一邮箱:${__UUID()}@zmtests.com;
避免缓存影响的随机参数:?nocache=${__UUID()}。
2. time 函数- __time() / __timeShift()
作用:生成当前时间戳或指定格式的时间字符串,也可进行日期加减计算。
__time() - 当前时间
语法:
${__time(格式, 变量名)}
格式:根据 SimpleDateFormat,如 yyyy-MM-dd HH:mm:ss。如果省略格式,直接写逗号可返回从1970-01-01到现在的毫秒数。
变量名:可选,将生成的时间存入变量,方便重复使用。
常见示例:
当前日期时间:${__time(yyyy-MM-dd HH:mm:ss,)}
当前时间戳(毫秒):${__time(,)}
存入变量后引用:${__time(yyyyMMddHHmmss, currentTS)},后续用 ${currentTS}
__timeShift() - 时间偏移
语法:
${__timeShift(格式, 日期字符串, 偏移量, 语言环境, 变量名)}
日期字符串:如 now(当前时间)或特定时间 2026-05-21。
偏移量:用 ISO 8601 不断时间格式,如 P1D(加 1 天)、-PT2H(减 2 小时)、P1DT1H(加 1 天 1 小时)。
语言环境:可留空。
变量名:可选。
示例:
明天的当前时刻:${__timeShift(yyyy-MM-dd HH:mm:ss,now,P1D,,)}
一周前日期:${__timeShift(yyyy-MM-dd,now,-P7D,,)}
存入变量:${__timeShift(yyyy-MM-dd,now,P1D,,nextDay)},后续用 ${nextDay}
典型场景:
请求中携带当前时间戳、过期时间;
模拟订单过期、提醒时间偏移测试;
构造动态日期范围的查询参数。
3. Random函数 - __Random() / __RandomString() / __RandomDate()
JMeter提供了多种随机函数,最常见的是 __Random 和 __RandomString。
__Random() - 随机整数
语法:
${__Random(最小值, 最大值, 变量名)}
生成 [最小值, 最大值] 区间内的一个随机整数。
存入变量后,可在后续请求中重复使用同一个随机值。
示例:
生成 1~100 的随机数:${__Random(1,100,)}
随机用户 ID 并复用:${__Random(1000,9999,userID)},之后用 ${userID}
__RandomString() - 随机字符串
语法:
${__RandomString(长度, 字符集, 变量名)}
长度:生成字符串的长度。
字符集:可选的字符范围。如果留空,则默认使用大小写字母和数字。也可以指定如 abcdefg 只从这几个字符中随机选取。
示例:
生成 8 位随机字母数字:${__RandomString(8,,)}
生成 6 位纯数字:${__RandomString(6,0123456789,)}
存入变量:${__RandomString(10,abcdef,myCode)},后面用 ${myCode}
__RandomDate() — 随机日期
${__RandomDate(起始日期, 结束日期, 日期格式, 变量名)}
示例:${__RandomDate(2024-01-01,2024-12-31,yyyy-MM-dd,)} 随机返回 2024 年某一天。
典型场景:
模拟不同用户 ID、账户 ID、金额;
构造随机手机号、证实码;
测试数据脱敏时生成随机姓名/字符串前缀;
随机选择日期进行历史数据查询。
三者组合实例
实际测试中,常将这三个函数组合起来,生成高度动态且不易重复的测试数据。如:
注册新用户 - 参数体:
json
{
"username": "user_${__time(yyyyMMdd,)}_${__Random(100,999,)}",
"email": "${__UUID()}@test.com",
"signupTime": "${__time(yyyy-MM-dd HH:mm:ss,)}"
}
username 包含日期和随机数,基本保证不重复;
email 借助 UUID 保证全局唯一;
signupTime 真实当前时间。
注意事项
函数大小写:__UUID、__time、__Random 都是严格按这个写法(UUID 全大写)。
逗号占位:如果一个函数有可选参数但不传值,需要保留逗号,如 ${__time(yyyy-MM-dd,)},否则可能报错。
变量作用域:带变量名的函数只会在第一次求值时生成值并存入变量,后续同一线程内引用该变量会保持相同值。如果不指定变量名,则每次调用都会重新生成。
性能:以上均为 JMeter 内置函数,效率很高,无需担心性能开销。