JMeter 的函数是其强大功能的核心之一,它们可以动态生成数据、操作字符串、进行逻辑判断等,极大地增强了测试脚本的灵活性和威力。
以下是最常用和最有价值的 JMeter 函数清单,分为 “必会核心函数” 和 “实用高级函数”,并附上具体用法和场景。
一、必会核心函数(几乎每个脚本都会用到)
这些函数用于生成最基本、最通用的动态数据。
1. __Random:生成随机整数
- 功能:在指定范围内生成一个随机整数。
- 语法:
${__Random(min, max, variableName)} - 示例与场景:
${__Random(1, 100, orderId)}生成 1 到 100 之间的随机数,并存储在orderId变量中。- 使用场景:模拟大量用户注册(用户名唯一)、生成随机的商品ID或订单ID进行查询。
- 结果:每次调用都会返回一个新值,如
45。
2. __time:获取当前时间戳
- 功能:返回当前时间的毫秒数(Unix 时间戳)。
- 语法:
${__time}-> 返回 13 位时间戳,如1718172830123。- 使用场景:通常用于确保请求的唯一性,避免服务器缓存。比如在测试缓存穿透、接口幂等性或作为唯一标识。
- 使用场景:参数化需要唯一标识或时间概念的请求。
3. __threadNum:获取当前线程编号
- 功能:返回当前正在执行的线程号(从 0 或 1 开始,取决于配置),非常适合用在登录场景中,模拟不同线程使用不同用户名。
- 语法:
${__threadNum} - 示例与场景:
- 用户名参数化为:
testuser${__threadNum}。 - 结果:线程1 ->
testuser1,线程2 ->testuser2… 这样就能轻松模拟大量不同用户。 - 结果:线程1 返回
1,线程2 返回2。
4. __counter:计数器
- 功能:生成一个递增的数字。
- 语法:
- ${__counter(FALSE, refName)}:每个用户各自独立计数(如线程1:1,2,3,…)。
- 使用场景:需要生成唯一且有序的编号,如订单号、流水号。
- ${__counter(TRUE, refName)}:全局计数器,所有用户共用。
- 示例与场景:
- 用户名参数化为:
user${__counter(FALSE,)}-> 1,2,3…
二、实用高级函数(解决特定复杂问题)
这些函数在特定场景下非常强大。
5. __StringFromFile:从文件读取字符串
- 功能:按顺序或随机从文件中读取一行。
- 语法:
${__StringFromFile(filename.txt,,,)} - 使用场景:文件上传/下载接口,需要参数化不同的文件名。
- 示例与场景:
- 创建
users.txt文件,每行一个用户名。 - 语法:
${__UUID}。 - 示例与场景:
- 订单ID参数化为:
${__UUID}。 - 结果:生成一个唯一的 UUID 字符串,如
550e8400-e29b-41d4-a716-446655440000。 - 结果:如
e4d1c6a8-3b2f-4e1a-8c5a-123456789abc。 - 使用场景:需要绝对的全局唯一ID时。
7. __RandomString:生成随机字符串
- 功能:生成指定长度的随机字符串。
- 语法:
${__RandomString(10, abcdefg123)}
三、函数的使用方法与技巧
1. 如何调用函数
- 方法一:直接输入
在任何可以输入文本的地方(如 Path、Parameters、Body Data),直接输入函数表达式即可。 - 方法二:使用函数助手对话框
- 菜单栏 → 工具 → 函数助手对话框。
- 函数:在下拉列表中选择所需函数,例如
__Random。 - 参数:根据下方的提示输入所需的参数。
- 生成:点击“生成”按钮,表达式会自动复制到剪贴板,然后粘贴到需要的地方。
2. 综合实战案例:用户注册并查询订单
目标:模拟 10 个用户,每个用户注册一个唯一账号,然后用这个账号登录并查询自己的订单。
步骤:
-
线程组设置:线程数 = 10,循环次数 = 2。
-
CSV 数据文件设置:指向一个包含 20 个不同邮箱的 CSV 文件。
请求 1:注册 (HTTP POST)
- 用户名:
test${__threadNum}_${__counter(TRUE,)}。 - 这个组合能确保在并发环境下生成全局唯一的用户名。
请求 2:查询订单 (HTTP GET)
- Path:
/orders/${__BeanShell(vars.get("orderId_${__threadNum}")}。
通过熟练掌握这些函数,你可以让 JMeter 脚本摆脱静态数据的束缚,真正实现高度动态化、逼真的压力测试。
950

被折叠的 条评论
为什么被折叠?



