【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 | |
__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
和System.err
中。在这种情况下,输出总是会被打印(它不依赖于当前的日志设置)。
示例:
${__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(demo.txt,,,)} 读取demo.txt读取多个文件,需要在文件名中使用序列号:
${_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
使用序列号时,路径名被用作 java.text.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列:
${__CSVRead(random.txt,0)}读取文件中的第1行第2列,并进入文件下一行:
${__CSVRead(random.txt,1)}${__CSVRead(random.txt,next)}读取文件第2行第1列:
${__CSVRead(random.txt,0)}读取文件中的第2行第2列,并进入文件下一行:
${__CSVRead(random.txt,1)}${__CSVRead(random.txt,next)}
注意:
- 该函数不适合用于大型文件,因为整个文件都存储在内存中。
- 对于较大的文件,最好使用
CSV Data Set Config
或者StringFromFile
。 - 默认情况下,该函数在每个逗号处拆分行。如果要输入包含逗号的列,则需要通过设置属性将分隔符更改为不出现在任何列数据中的字符,修改
jmeter.properties
文件中的csvread.delimiter=
。
4、__XPath
- 该函数读取 XML 文件,并在文件中寻找与指定 XPath 相匹配的地方。
- 每调用函数一次,就会返回下一个匹配项。到达文件末尾后,会从头开始。如果没有匹配的节点,那么函数会返回空字符串,另外,还会向JMeter日志文件写一条警告信息。
- 整个节点列表都会被保存在内存之中,所以文件较大时不适合使用。
示例:
${__XPath(/path/to/build.xml, //target/@name)}
这会找到 build.xml 文件中的所有目标节点,并返回下一个 name 属性的内容。
三、数据计算函数
1、 __counter
- 每次调用该计数器函数都会产生一个新值,从1开始每次加1。
- 计数器既可以被配置成针对每个虚拟用户是独立的,也可以被配置成所有虚拟用户公用的。
- 如果每个虚拟用户的计数器是独立增长的,那么通常被用于记录测试计划运行了多少遍。全局计数器通常被用于记录发送了多少次请求。
- 计数器使用一个整数值来记录,允许的最大值为 2,147,483,647。
- 目前计数器函数实例是独立实现的(JMeter 2.1.1及其以前版本,使用一个固定的线程变量来跟踪每个用户的计数器,因此多个计数器函数会操作同一个值)。全局计数器(FALSE)的每个计数器实例都是独立维护的。
- 该函数也有对应的配置元件:计数器,功能类似。
2、__intSum
- 函数
__intSum
可以被用来计算两个或者更多整数值的和。至少需要两个整数,如果指定变量名则名称中必须包含一个非数字字母,否则它会被当成另一个整数值,而被函数用于计算。
注意:
在 4.0 版本之前,当有多个整数时,要通过点击添加按钮来增加参数,但是需要注意的是,添加完参数后,点击 生成
的函数默认是把手动添加的函数放在后面,这时需要手动调整变量名的位置,把它放到最后,否则会报错。 在 4.0 版本之后,该问题已解决。
4.0 之前版本添加多个整数示例如下:
3、__longSum
该函数用来计算两个或更多长整型值的和,使用方法跟上面的 __intSum
函数一样,这里不再赘述。
4、__Random
- 随机数函数返回指定最大值和最小值之间的随机整数,
返回 0--10 之间的随机整数:
${__Random(0,10)}
5、__RandomDate
- 返回位于给定开始日期和结束日期值之间的随机日期。
示例:
${__RandomDate(,,2050-07-08,,)} 随机返回一个从现在到 2050-07-08 的日期,例如 2039-06-21${__RandomDate(dd MM yyyy,,08 07 2050,,)} 返回带有自定义格式的随机日期,如 04 03 2034
6、_RandomString
- 根据给定的字符,生成指定长度的随机字符串。
Random string length
:生成的随机字符的长度Chars to use for random string generation
:用来生成随机字符串的字符,可以是纯数字,纯字符,字符字母数字组合。Name of variable in which to store the result (optional)
:保存结果的变量
例如:
${__RandomString(6,abcdefgh1234566,ranstr)}
随机生成一个6位长度的字符串,并保存在变量 ranstr 中,后续可以通过 ${ranstr}
来调用。
7、__UUID
- 通用唯一标识符函数,生成一个32位不重复的随机字符串。
示例:
${__UUID()}
返回结果类似:c69e0dd1-ac6b-4f2b-8d59-5d4e8743eecd
。
四、属性信息函数
1、__isPropDefined
- 用于判断属性是否存在。
示例:
${__isPropDefined(START.HMS)}
判断属性 START.HMS 是否存在,返回 true。
2、__property
- 获取属性值。
示例:
${__property(user.dir)} 返回 user.dir 的值。
${__property(user.dir,UDIR)} 返回 user.dir 的值,并保存在变量 UDIR 中。${__property(abcd,ABCD,atod)} 返回属性 abcd 的值,如果该属性未定义则返回 atod,并保存在变量 ABCD 中。
${__property(abcd,,atod)} 返回属性 abcd 的值,如果该属性未定义则返回 atod,不保存结果值。
3、__P
- 这是一个简化的属性函数,用于与命令行上定义的属性一起使用。
- 与
_property
函数不同,没有选项可以将值保存在变量中,如果不提供默认值,则假定为1。
示例:
在脚本中定义如下两个函数:
${__P(group1.threads, 10)}
${__P(group1.loops)}在命令行中调用:
jmeter -Jgroup1.threads=50 -Jgroup1.loops=100 执行时,两个参数分别是 50、100。若命令行中不设置属性,执行时,两个参数分别是 10、1。
4、__setProperty
- 该函数用于设置 JMeter 属性的值。
- 函数的默认返回值是空字符串,因此该函数可以被用在任何地方,只要对函数本身调用是正确的。
- 通过将函数可选的第3个参数设置为"true",函数就会返回属性的原始值。
- 属性对于JMeter是全局的,因此可以被用来在线程和线程组之间通信。
五、字符串操作函数
1、__split
- 根据分隔符拆分字符串为多个变量。
- 当两个分隔符中间没有字符时,返回
?
。 - 被拆分出来的字符串,保存在变量中,类似这样:
${VAR_1}, ${VAR_2} ...
,总个数是${VAR_n}
。 - 如果最后一个字符是分隔符,也会返回
?
。
示例:
定义字符串:
VAR="a||c|"调用 split 函数:
${__split(${VAR},VAR,|)}
返回 "a||c|",并生成如下变量:
VAR_n=4
VAR_1=a
VAR_2=?
VAR_3=c
VAR_4=?
VAR_5=null
2、__changeCase
- 根据指定的模式,修改字符串大小写;
- 可选模式有:
UPPER
、LOWER
、CAPITALIZE
。
示例:
UPPER--转换成大写字母:
${__changeCase(Avaro omnia desunt\, inopi pauca\, sapienti nihil,UPPER,)}
返回 AVARO OMNIA DESUNT, INOPI PAUCA, SAPIENTI NIHILLOWER--转换成小写字母:
${__changeCase(LABOR OMNIA VINCIT IMPROBUS,LOWER,)}
返回 labor omnia vincit improbusCAPITALIZE--单词首字母大写:
${__changeCase(omnibus viis romam pervenitur,CAPITALIZE,)}
返回 Omnibus viis romam pervenitur
3、__regexFunction
- 使用正则表达式解析之前的响应结果。
- 该函数使用用户提供的正则表达式来解析前面的服务器响应(或者是某个变量值)。函数会返回包含变量值的模板字符串。
- 在函数的第6个参数中,可以指定一个引用名,保存变量值,供后续调用。
变量调用示例:
Name of variable in which to store the result
:在这个参数中设置变量名为 refName
,那么我们可以使用:
${refName} 来引用第2个参数(Template for the replacement string)的计算结果,这依赖于函数的解析结果。
${refName_g0} 来引用函数解析后发现的所有匹配结果。
${refName_g1} 来引用函数解析后发现的第一个匹配组合。
${refName_g#} 来引用函数解析后发现的第n个匹配组合。
${refName_matchNr} 来引用函数总共发现的匹配组合数目。
具体参数描述如下:
其实这个函数的作用跟正则表达式提取器的作用是类似的。
六、脚本函数
1、__BeanShell
- 它有两个参数,第一个参数是要执行的语句,可以是beanshell语句或者是文件地址,是必选参数;
- 第二个参数是保存结果的变量名称,非必选参数。
示例:
${__BeanShell(123*456)} 返回56088${__BeanShell(source("function.bsh"))} 会执行外部脚本function.bsh,并返回结果${__BeanShell(import java.util.*;Properties props = System.getProperties();String osName = props.getProperty("os.name");if(osName.contains("Windows"))return 443;return 8443;)} 根据不同系统返回端口号
与 beanshell 元件比较:
该函数与 beanshell 元件(beanshell sampler、beanshell preprocess等)作用是一样的,只是 beanshell 函数更常用于一些简单的判断或计算等,可以把少量的脚本放在函数中直接赋值给一个变量,而不用总是添加 beanshell 元件。
2、__javaScript
- 用来执行
JavaScript
脚本片段,并返回结果值。 - 该函数会调用标准的 JavaScript 解释器,还可以直接调用 jmeter 的内置函数。
注意:文本字符串要添加必要的引号。如果表达式中有逗号,要确保对其转义。
例如:${__javaScript('${sp}'.slice(7\,99999))}
,对 7 之后的逗号进行了转义。
【JMeter】总结 jmeter 中各种函数相关推荐
- 关于Jmeter中的函数和变量用法
以下内容来自官方页面,链接:Apache JMeter - User's Manual: Functions and Variables github 20. 函数和变量 JMeter 函数是可以填充 ...
- python函数助手_转jmeter(十五)函数助手
由于时间和版本问题,其中有些内容和排版我做了修改和重新整理,使其更符合最新的jmeter版本. 一.使用jmeter函数助手 启动jmeter后,可以在JMeter的选项菜单中找到函数助手对话框(快捷 ...
- Jmeter运行过程中如何让Fiddler同时可以抓获到服务器的应答报文
在默认情况下,Jmeter运行过程中,Fiddler是抓不到对应的应答报文的. 但是,在某些时候,我们希望分析Jmeter执行失败的原因,想了解Jmeter获取到的应答报文是否有问题,就需要同服务器返 ...
- 将jmeter响应结果中部分数据保存到本地文件
以登录接口为例,将jmeter响应结果中的data中的username字段的值,导出到本地文件,文件格式可以是.csv,txt 等等: 1.建一个登录接口的线程组: 1)新增一个--HTTP信息头管理 ...
- 如何在JMeter负载测试中模拟不同的网络速度
移动终于超越了桌面流量 - 这种趋势看起来有望上升.但这对我们意味着什么? 对于初学者来说,这意味着现在,我们比以往任何时候都更需要在运行性能测试时关注移动用户.如果我们的移动网站或应用程序表现不佳 ...
- 在jmeter中怎么提取数据_如何使用JMeter从文件中提取数据
在性能测试方面,重用响应数据至关重要.几乎(如果不是全部!)负载测试场景假设您: 从先前的响应中提取有趣的方面,并在下一个请求中重用它们(也称为相关) 确保实际响应符合预期(又称断言) 因此,如果您是 ...
- jmeter压力测试过程中遇到过的问题及解决方法(包括jmeter和服务程序)
1. 关于jmeter相关的问题 1.1 为什么要编写接口测试代码? 因为有些接口需要特殊格式的参数,比如需要特定的加密处理和解密处理,有的接口参数是动态生成的,有的接口参数是上一个接口返回的,所以测 ...
- JMeter基础 — JMeter聚合报告详解
提示:聚合报告组件的使用和察看结果树组件的使用方式相同.本篇文章主要是详细的介绍一下聚合报告组件内容,不做示例演示. 1.聚合报告介绍 在使用JMeter进行性能测试时,聚合报告(Aggregate ...
- 【jmeter】JMeter日志查看与日志分析
1 JMeter日志概览 jmeter日志文件保存在bin目录中,名称为jmeter.log.我们可以在面板中直接察看日志,点击右上角黄色标志物可以打开日志面板,再次点击收起 另外,JMeter可以 ...
最新文章
- Java双大括号_什么是Java中的双BRACE初始化?
- 程序员转实施工程师_只有程序员才能看得懂?程序员:算了,不看了,我得写代码了...
- 【渝粤题库】陕西师范大学201941 Java程序设计 作业(专升本)
- 为什么即使在班级均衡的情况下,准确度仍然令人困扰
- azure多功能成像好用吗_了解Azure持久功能
- ThreadLocal知识点详解
- raspberry pi_如何使用Raspberry Pi设置个人Web服务器
- CSS隐藏内容的三种方法比较
- Crust Network将于1月14日12点开始暂停HTTP版本应用
- python 分割不等长字符串表格_python如何将字符串等长分割
- 经济学原理_宏观经济学,微观经济学合集 N.格里高利·曼昆PDF
- php林大飞,和大飞签约
- SpringCloud 微服务(一)
- 【数据库】聚簇索引与非聚簇索引
- 如何修改非root用户的ulimit -n的值
- Linux日常软件安装(FC6)
- Kali Linux渗透测试 093 自动注入-Sqlmap
- java读取 png_JAVA如何操作PNG图片
- Android FrameWork学习(一)Android 7.0系统源码下载\编译
- 回撤率 python_回的解释|回的意思|汉典“回”字的基本解释