【JMeter】总结jmeter中各种函数
本⽂内容总结了 JMeter 中的各种常⽤函数、复杂函数、对我⽐较有⽤的函数 等等。
但是,并没有包含全部函数。
JMeter 提供了很多函数,可以很⽅便的实现⼀些⼩功能,⼏乎可以⽤于测试计划中的任何元件。
函数调⽤的格式如下所⽰:
${__functionName(var1,var2,var3)}
其中,__functionName 为函数名,括号内是函数的参数,⽆参数时可以不⽤括号,如 ${__UUID}。
Tips:
如果参数包含逗号,那么⼀定要使⽤ \ 来转义,否则 JMeter 会把它当作⼀个参数分隔符;
实际使⽤时,⼀般通过函数助⼿对话框来⽣成函数字符串,不容易出错。
JMeter 中的函数主要分为如下⼏类:
字符串比较函数实现
函数类型函数名称函数作⽤启⽤版本获取信息函数__TestPlanName返回当前测试计划的名称
__threadGroupName返回当前线程组的名称  4.1
__threadNum返回当前正在执⾏的线程的编号  1.X
__samplerName返回当前请求的名称  2.5
__log输出⽇志信息  2.2
__time以多种格式返回当前时间  2.2数据输⼊函数__StringFromFile从⽂本⽂件中读取字符串,每次调⽤读取⼀⾏  1.9
__FileToString把⽂件读取成⼀个字符串,每次调⽤都是读取整个⽂件  2.4
__CSVRead返回当前正在执⾏的线程的编号  1.9
__XPath使⽤ XPath 语法匹配 XML⽂件  2.0数据计算函数__counter计数器函数  1.9
__intSum对多个整数求和  1.8.1
__longSum长整型求和  2.3.2
__Random返回指定最⼤值和最⼩值之间的随机整数  1.9
__RandomDate返回给定开始⽇期和结束⽇期值之间的随机⽇期  3.3
_RandomString根据给定的字符⽣成指定长度的随机字符串  2.6
__UUID通⽤唯⼀标识符函数  2.9属性信息函数__isPropDefined判断属性是否存在  4.0
__property对多个整数求和  1.8.1
__P简化的属性函数,⽤于与命令⾏上定义的属性⼀起使⽤  2.0
__setProperty简化的属性函数,⽤于与命令⾏上定义的属性⼀起使⽤  2.0字符串操作函数__split根据分隔符拆分字符串为多个变量  2.0.2 __changeCase转换⼤⼩写  4.0
__changeCase 转换⼤⼩写  4.0__regexFunction
使⽤正则表达式解析之前的响应结果
1.X 脚本函数__BeanShell 执⾏ beanshell 脚本
1.X __javaScript
执⾏ js 脚本
1.9
函数类型
函数名称函数作⽤
启⽤版本⼀、获取信息函数
1、__TestPlanName
⽤法:${__TestPlanName},返回当前测试计划的名称;如:测试计划名称是 Demo.jmx , 即返回 Demo.jmx 。
2、__threadGroupName
⽤法:${__threadGroupName},返回当前线程组的名称,从 4.1 版本开始启⽤。
该函数不能⽤在任何配置元件中(如⽤户定义的变量),因为配置元件是由另外的独⽴线程运⾏的,它也不能在测试计划(Test Plan)中使⽤。
3、__threadNum
⽤法:${__threadNum},返回当前正在执⾏的线程的编号,⽽且不依赖于线程组;
也就是说以这个函数的结果来看,不能区别线程组1的线程#1 和 线程组2的线程#1,如下图所⽰:
不能⽤在配置元件 和 测试计划中。
4、__samplerName
⽤法:${__samplerName()},返回当前请求的名称。
5、__log
记录⼀条⽇志,并返回函数的输⼊字符串。
可以设置不同的⽇志级别,如 OUT  和 ERR  将会分别输出记录到 System.out  和   中。在这种情况下,输出总是会被打印(它不依赖于当前的⽇志设置)。⽰例:
${__log(Message)}:写⼊⽇志⽂件,形如 "...thread Name : Message"。
${__log(Message,OUT)}:写到控制台窗⼝。
${__log(${VAR},,,VAR=)}:写⼊⽇志⽂件,形如"...thread Name VAR=value"。
6、__time
以多种格式返回当前时间
如果省略了格式字符串,那么函数会以毫秒的形式返回当前时间。其他情况下,当前时间会被转成简单⽇期格式。
jmeter 中默认定义的时间格式属性值有:
YMD = yyyyMMdd。
HMS = HHmmss。
YMDHMS = yyyyMMdd-HHmmss。
USER1 = JMeter属性time.USER1。
USER2 = JMeter属性time.USER2。
⽤户可以通过修改JMeter属性来改变默认格式,例如,time.YMD=yyMMdd。
使⽤⽰例:
${__time()} 返回'1548133155699'
${__time(YMD,)} 返回'20190122'
${__time(dd/MM/yyyy,)} 返回'22/01/2019'
⼆、数据输⼊函数
1、__StringFromFile
1.1 作⽤
⽤于从⽂本⽂件中读取字符串,每次读取⼀⾏,⽀持读取多个⽂件。
使⽤配置元件CSV Data Set Config ,也能达到相同的⽬的,⽽且⽅法更简单,但是它⽬前不⽀持多个输⼊⽂件。
每次调⽤函数,都会从⽂件中读取下⼀⾏。当到达⽂件末尾时,函数⼜会从⽂件开始处重新读取,直到最⼤循环次数。如果在⼀个测试脚本中对该函数有多次引⽤,那么每⼀次引⽤都会独⽴打开⽂件,即使⽂件名是相同的(如果函数读取的值,在脚本其他地⽅也有使⽤,那么就需要为每⼀次函数调⽤指定不同的变量名)。
如果在打开或者读取⽂件时发⽣错误,那么函数就会返回字符串 **ERR**。
1.2 参数
参数描述是否必填
⽂件名
⽂件名的路径 (路径可以相对于 JMeter 启动⽬录)。
如果使⽤序列号,路径名称应该适合传递到 DecimalFormat。
变量名⽤于后续调⽤该函数的变量名称否启动序号初始序列号(如果省略,则将结束序列号视为循环计数)否末端序号最终序列号(如果省略,序列号可以⽆限制地增加)否
启动序号:初始的序列号,如果省略,那么结束序列号就代表⽂件的循环读取次数。
末端序号:结束序列号,如果省略,那么序列号会⽆限增长。
1.3 ⽰例
读取单个⽂件:
${_,,,)}    读取
读取多个⽂件,需要在⽂件名中使⽤序列号:
${_StringFromFile(PIN.DAT,,,2)}    读取 PIN.DAT 两次
${_StringFromFile(PIN#'.'DAT,,1,3)}    读取 PIN1.DAT PIN2.DAT PIN3.DAT
${_StringFromFile(pin000'.'dat,,6,8)}    读取 pin006.dat pin007.dat pin008.dat
使⽤序列号时,路径名被⽤作 DecimalFormat 的格式字符串。当前序列号作为唯⼀参数传⼊。如果未指定开始序列号,则按原样使⽤路径名称。
1.4 格式化序列
常⽤的两个格式化序列:
#:插⼊数字,没有前导零或空格。
000:插⼊数字,数字不⾜三位时,将插⼊前导零补⾜三位;数字超过三位时,则插⼊数字实际位数。
⽤法说明:
在不带前导零的情况下插⼊数字:
pin#'.'dat -> pin1.dat, ... pin9.dat, pin10.dat, ... pin9999.dat
带前导零的情况下插⼊数字:
pin000'.'dat -> pin001.dat ... pin099.dat ... pin999.dat ... pin9999.dat
在不带前导零的情况下追加数字:
pin'.'dat# -> pin.dat1, ... pin.dat9 ... pin.dat999
注意:上⾯的 . 是格式化字符,必须⽤单引号括起来。
2、__FileToString
把⽂件读取成⼀个字符串,每次调⽤都是读取整个⽂件。
如果出现打开或读取⽂件的错误,则函数将返回字符串 **ERR**。
参数:
参数描述是否必填⽂件名⽂件名的路径。(路径可以相对于JMeter启动⽬录)是
⽂件编码⽤于读取⽂件的编码。如果未指定,则使⽤平台默认值。否
变量名⽤于后续调⽤该函数的变量名称。否
3、__CSVRead
3.1 作⽤
从⼀个 CSV ⽂件中返回⼀个字符串,⽀持多个⽂件名。
当第⼀次调⽤该函数时,⽂件将被打开并读取到⼀个内部数组中。如果检测到空⾏,这将被视为⽂件的末尾。
所有对同⼀⽂件名的后续引⽤都使⽤相同的内部数组,⽂件名区分⼤⼩写。
每个线程都有⾃⼰的指向⽂件数组中当前⾏的内部指针。当线程⾸先引⽤⽂件时,它将在数组中分配下⼀个空闲⾏,因此每个线程将访问与所有其他线程不同的⾏(除⾮数组中的线程多于⾏)。
3.2 参数
参数描述是否必填⽂件名要读取的⽂件名是列号⽂件中的列号。0–第⼀列,1–第⼆列,next–⽂件的下⼀⾏。是
3.3 ⽰例
读取⽂件中的第1⾏第1列:
${__,0)}
读取⽂件中的第1⾏第2列,并进⼊⽂件下⼀⾏:
${__,1)}${__,next)}
读取⽂件第2⾏第1列:
${__,0)}
读取⽂件中的第2⾏第2列,并进⼊⽂件下⼀⾏:
${__,1)}${__,next)}
注意:
该函数不适合⽤于⼤型⽂件,因为整个⽂件都存储在内存中。
对于较⼤的⽂件,最好使⽤ CSV Data Set Config 或者 StringFromFile。
默认情况下,该函数在每个逗号处拆分⾏。如果要输⼊包含逗号的列,则需要通过设置属性将分隔符更改为不出现在任何列数据中的字符,修改 jmeter.properties ⽂件中的 csvread.delimiter=。
4、__XPath
该函数读取 XML ⽂件,并在⽂件中寻与指定 XPath 相匹配的地⽅。
每调⽤函数⼀次,就会返回下⼀个匹配项。到达⽂件末尾后,会从头开始。如果没有匹配的节点,那么函数会返回空字符串,另外,还会向JMeter⽇志⽂件写⼀条警告信息。
整个节点列表都会被保存在内存之中,所以⽂件较⼤时不适合使⽤。
⽰例:
${__XPath(/path/l, //target/@name)}
这会到 l ⽂件中的所有⽬标节点,并返回下⼀个 name 属性的内容。
三、数据计算函数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。