推荐阅读链接: 小菠萝测试笔记 - 博客园 (cnblogs.com)
参考文件:jmeter 组件学习_jmeter 内容类型-优快云博客
csv文件的读取方式
线程组设置
jmeter中常用的函数
1. 变量与参数化函数
__V
(动态变量解析)用途:解析嵌套变量(JMeter 默认不支持
${${var}}
这种写法)。
语法:${__V(variableName)}
示例:// 假设: // - varName = "token" // - token = "abc123" // 错误写法(JMeter 不支持嵌套变量) ${${varName}} → 无效 // 正确写法(使用 __V) ${__V(${varName})} → 返回 "abc123"
__setProperty
函数的语法如下:plaintext
${__setProperty(property_name,property_value,default_value)}
property_name
:要设置的属性名称。property_value
:要设置的属性值。default_value
(可选):若property_value
为空,就会使用这个默认值
__Random
生成随机数(整数)。
${__Random(1,100,varName)} // 生成1-100的随机数,存储到变量varName
__RandomString
生成随机字符串。${__RandomString(10,abcdef12345)} // 从指定字符中生成10位随机字符串
__CSVRead
从CSV文件读取数据(需配合 CSV Data Set Config 使用更灵活)。${__CSVRead(data.csv,0)} // 读取data.csv第一列的数据
__Property
读取JMeter属性(全局变量)。${__property(user.dir)} // 获取JMeter启动目录
2. 字符串处理函数
__split
分割字符串为数组。${__split(apple,banana,orange,fruits)} // 分割后通过${fruits_1}访问banana
__substring
截取子字符串。${__substring(Hello World,6,11,result)} // 截取"World"
__replace
替换字符串中的内容。${__replace(123-456,-,)} // 输出"123456"
__eval
执行变量或表达式。${__eval(${var1}_${var2})} // 拼接变量var1和var2
3. 时间与日期函数
__time
获取当前时间戳(可格式化)。${__time(yyyy-MM-dd HH:mm:ss,)} // 输出"2023-10-01 14:30:00"
__timeShift
时间戳加减(支持时区)。${__timeShift(yyyy-MM-dd,,P1D,,)} // 当前日期加1天
4. 数学运算函数
__counter
计数器(全局或局部递增)。${__counter(FALSE,count)} // 全局计数器,从1开始递增
__intSum
整数求和。${__intSum(1,2,3,sum)} // 输出6
__RandomDate
生成随机日期。${__RandomDate(yyyy-MM-dd,2023-01-01,2023-12-31,)}
5. 逻辑控制函数
__if
条件判断。${__if(${var}==1,value1,value2)} // 若var=1返回value1,否则value2
__jexl3
/__groovy
执行脚本逻辑(支持复杂表达式)。${__jexl3(${var} > 10 ? "high" : "low")}
6. 特殊用途函数
__UUID
生成唯一UUID。${__UUID()} // 输出如"550e8400-e29b-41d4-a716-446655440000"
__threadNum
获取当前线程编号(从1开始)。${__threadNum} // 用于区分不同线程的数据
__TestPlanName
获取当前测试计划名称。${__TestPlanName}
高斯随机定时器
斯随机定时器(Gaussian Random Timer) 是一种用于模拟真实用户操作间隔的定时器
典型应用场景:
-
模拟用户阅读页面内容的思考时间。
-
在连续操作之间添加随机间隔(如点击按钮、提交表单)。
-
避免所有线程在同一时间点发送请求,减少服务器瞬时压力
定时器的作用范围:
若放在线程组下面:该线程组内的所有采样器在执行前都会受到此定时器影响
若放在某个采样器下:只有该采样器在执行前会受到此定时器影响
- 名称(Name):定时器的名称,可自定义,方便你识别。
- 注释(Comment):对该定时器功能的简要说明,可选。
- 平均延迟(Mean Delay):设定暂停时间的平均值,单位是毫秒。例如,若设为
1000
,则平均暂停时间为 1 秒。 - 标准差(Standard Deviation):它决定了延迟时间相对于平均值的分散程度。较大的标准差会使延迟时间更分散,较小的标准差则会让延迟时间更接近平均值
定时器
同步定时器
同步定时器用于将多个线程同步,让它们在同一时刻发起请求
设置较多的线程数、较短的 Ramp - Up Period 和合适的同步定时器分组线程数,能够模拟瞬间高并发的场景,用于测试系统的峰值处理能力
跨线程组传值
方式1 :setproperty
备注: 试过不可用
jmeter跨线程组保持登录(多线程共享cookie);两种方式 - 星空6 - 博客园
方式2:使用Property
实现变量传递
第一步: 是在一个线程组中设置全局变量
在JMeter中,使用Beanshell 后置处理器设置Property
//获取本地变量值
String path = vars.get("path1");
log.info("path1 = " + path);
// 在第一个线程组中设置Property变量
props.put("globalPath", path);
log.info("globalPath = " + props.get("globalPath"));
解释:
-
•
vars.get("path1")
用于获取当前线程组中的变量。 -
•
props.put("globalPath", path)
将局部变量path1
的值设置为全局变量globalPath
,该变量可以被其他线程组访问
第二步:获取全局变量 (Property
)
可以直接在http请求中使用: ${__P(globalPath
)}
csv数据文件读取
在线程下添加csv data set config
- 注意创建文件的时候,文件的类型要是: csv,不要创建成了 txt格式的
-注意引用的时候,不要忘记 '' "
关联接口的方式
后置处理器-xpath提取器
正则提取器
引用名称:为提取到的数据设置一个变量名,后续可在其他采样器中通过 ${变量名}
引用该数据。例如,设置为 “user_id”,后续使用 ${user_id}
就能获取提取到的值
正则表达式 : <tag>(.*?)</tag> : (.*?)表示匹配任意字符,?为匹配非贪婪模式,尽可能少的匹配字符
模板:用于指定提取结果的格式,通常使用 $1$
表示提取到的第一个分组的数据。若正则表达式中有多个分组,可使用 $2$
、$3$
等依次表示
模板参数值的含义
$1$
、$2$
等形式: