『动善时』JMeter基础 — 28、JMeter函数助手详解
1、函数助手介绍
在性能测试过程中,为了模拟真实的用户,往往我们需要让提交的表单内容每次都发生变化,这个过程叫做参数化。
JMeter中的配置元件与前置处理器都能帮助我们实现参数化,为了能够更好的帮助我们进行参数化,JMeter提供了一组函数来帮助我们生成需要的数据,这些函数在函数助手面板进行选择和编辑。
当然函数助手的功能不仅仅是进行参数化,还可以帮我们进行字符编码,格式转化,获取运行时参数等功能。
2、函数助手中的函数分类
JMeter中大概分为七个类型的函数:
(1)信息类
主要用于获取一些常用的基本信息或是日志输出控制。
__threadnum函数:只是简单地返回当前线程的编号。__samplerName函数:获取当前请求的名称。__machineIP函数:获取本机的IP地址。__machineNmae函数:返回本机的主机名。__time函数:可以通过多种格式返回当前时间。__log函数:会记录一条日志,并返回函数的输入字符串。__logn函数:会记录一条日志,并返回空字符串。__TestPlanName函数:获取当前测试计划。
(2)输入类
主要用于从外部文件读取数据,进行参数化。即:用于读取文件。
__StringFromFile函数:可以被用来从文本文件中读取字符串,这对需要大量可变数据的测试很有用。__FileToString函数:可以被用来读取整个文件。每次对该函数的调用,都会读取整个文件。__CSVRead函数:会从CSV文件读取一个字符串(请注意与StringFromFile 的区别)。__XPath函数:读取XML文件,并在文件中寻找与指定XPath相匹配的地方。每调用函数一次,就会返回下一个匹配项。到达文件末尾后,会从头开始。
(3)计算类
用于计数、求和等操作。
__counter函数:每次调用计数器函数都会产生一个新值,从1开始每次加1。__intSum函数:可以被用来计算两个或者更多整数值的和。__longSum函数:可以被用来计算两个或者更多长整型值的合。__Random函数:会返回指定最大值和最小值之间的随机数。__RandomFromMultipleVars函数:从一组数据中提取一个数据。__RandomString函数:生成随机字符串。__UUID函数:生成随机的唯一的UUID。
(4)脚本类
主要用于调用外部脚本或是解析执行脚本,例如:groovy、beanshell等 。
__groovy函数:执行groovy脚本。会执行传递给它的脚本,并返回结果。__BeanShell函数:会执行传递给它的脚本,并返回结果。__javaScript函数:可以用来执行JavaScript代码片段(非Java),并返回结果值。__jexl2函数:可以用于执行JEXL2表达式,并返回执行结果。__jexl3函数:可以用于执行JEXL3表达式,并返回执行结果。
(5)属性类
用于读取和设置JMeter的配置。
__property函数:会返回一个JMeter属性的值。如果函数找不到属性值,而又没有提供默认值,则它会返回属性的名称。__P函数:是一个简化版的属性函数,目的是使用在命令行中定义的属性。不同于函数__property,本函数没有提供选项用于设置保存属性值的变量。__setProperty函数:用于设置JMeter属性的值。函数的默认返回值是空字符串,因此该函数可以被用在任何地方,只要对函数本身调用是正确的。
(6)变量类
对变量进行操作,主要用于验证变量表达式引用是否正确。
__split函数:会通过分隔符来拆分传递给它的字符串,并返回原始的字符串。如果分隔符紧挨在一起,那么函数就会以变量值的形式返回"?"。__V函数:可以用于执行变量名表达式,并返回执行结果。__eval函数:可以用来执行一个字符串表达式,并返回执行结果。如此一来,用户就可以对字符串中的变量和函数引用做出修改。__evalVar函数:可以用来执行保存在变量中的表达式,并返回执行结果。
(7)字符串类
用于对字符串的处理操作。
__regexFunction函数:正则表达式函数可以使用正则表达式(用户提供的)来解析前面的服务器响应(或者是某个变量值),函数会返回一个有模板的字符串,其中携带有可变的值。还可以被用来保存值,以便供后续使用。__escapeOroRegexpChars函数:将一些Java正则表达式引擎不识别的正则式进行转换,转换过程中使用了ORO正则表达式库,这个库也支持Perl5兼容的正则表达式语法。(Perl是一种高级、通用、直译式、动态的脚本语言,内部集成了正则表达式的功能)__char函数:会将一串数字转换成Unicode字符。__unescape函数:用于反转义Java-escaped字符串。__unescapeHtml函数:用于反转义一个包含HTML实体的字符串,将其变为包含实际Unicode字符的字符串。__escapeHtml函数:用于转义字符串中的字符(使用HTML实体)。即:使用html coding编码目标字符串。__escapeXml函数:使用XML coding编码目标字符串。__urldecode函数:urlcode解码。__urlencode函数:编码为urlcode。
3、常用函数介绍
(1)__Random函数
__Random函数会返回指定最大值和最小值之间的随机数。
参数如下表所示:
| 函数参数 | 描述 | 是否必需 |
|---|---|---|
| 最小值 | 最小数值 | 是 |
| 最大值 | 最大数值 | 是 |
| 变量名 | 重用函数计算值的引用名 | 否 |
界面如下图:

提示:
__RandomString函数使用同理。
(2)__counter函数
每次调用计数器函数都会产生一个新值,从1开始每次加1。
计数器函数既可以被配置成针对每个虚拟用户是独立的,也可以被配置成所有虚拟用户公用的。
如果每个虚拟用户的计数器是独立增长的,那么通常被用于记录测试计划运行了多少遍。
全局计数器通常被用于记录发送了多少次请求,计数器使用一个整数值来记录,允许的最大值为2,147,483,647。
计数器函数界面如下:

说明:
- 第一个参数:必须填写
True:希望每个虚拟用户的计数器保持独立,与其他用户的计数器相区别。
False:全局计数器。 - 第二个参数:非必须填写
定义计数器函数创建值的引用名。可以这样引用计数器的值:${refName}。
这样一来,就可以创建一个计数器后,在多个地方引用它的值。
(3)__time函数
__time函数可以通过多种格式返回当前时间。
参数如下表所示:
| 函数参数 | 描述 | 是否必需 |
|---|---|---|
| 格式 | 设置时间所采用的格式 | 否 |
| 变量名 | 待设置变量名 | 否 |
界面如下图:

说明:
如果省略了格式字符串,那么函数会以毫秒的形式返回当前时间。
其他情况下,当前时间会被转成简单日期格式,包含如下形式:
YMD = yyyyMMddHMS = HHmmssYMDHMS = yyyyMMdd-HHmmssUSER1 = JMeter属性time.USER1USER2 = JMeter属性time.USER2
用户可以通过修改JMeter属性文件,来改变时间的默认格式,例如:time.YMD=yyMMdd。
(4)__property函数
__property函数会返回一个JMeter属性的值。如果函数找不到属性值,而又没有提供默认值,则它会返回属性的名称。
参数如下表所示:
| 函数参数 | 描述 | 是否必需 |
|---|---|---|
| 属性名 | 获取属性值、所需的属性名 | 是 |
| 变量名 | 重用函数计算值的引用名 | 否 |
| 默认值 | 属性未定义时的默认值 | 否 |
界面如下图:

示例:
${__property(user.dir)}:返回属性user.dir的值;${__property(user.dir,UDIR)}:返回属性user.dir的值,并保存在变量UDIR中;${__property(abcd,ABCD,atod)}:返回属性abcd的值 (如果属性没有定义,返回"atod"),并保存在变量ABCD中;${__property(abcd,,atod)}:返回属性abcd 的值(如果属性没有定义,返回"atod"),但是并不保存函数的返回值;
(5)__setProperty函数
__setProperty函数用于设置JMeter属性的值。函数的默认返回值是空字符串,因此该函数可以被用在任何地方,只要对函数本身调用是正确的。
通过将函数可选的第3个参数设置为"true",函数就会返回属性的原始值。
属性对于JMeter是全局的,因此可以被用来在线程和线程组之间通信。
参数如下表所示:
| 函数参数 | 描述 | 是否必需 |
|---|---|---|
| 属性名 | 待设置属性名 | 是 |
| 属性值 | 属性的值 | 是 |
| True/False | 是否返回属性原始值 | 否 |
界面如下图:

(6)__intSum函数
__intSum函数:可以被用来计算两个或者更多整数值的合。
如下图所示:

参数如下所示:
- 第1个参数:填写第1个整数值。必须填写。
- 第2个参数:填写第2个整数值。必须填写。
- 第n个参数:填写第n个整数值。非必须填写。
- 最后一个参数:存储结果的变量引用名(可选)。如果用户指定了这一参数,那么引用名中必须包含一个非数字字母,否则它会被当成另一个整数值,而被函数用于计算。
即:引用名是可选的参数,但是引用名不能是整数值。
提示:
__longSum函数同理。
(7)__machineName函数
__machineName函数返回本机的主机名。
参数如下表所示:
| 函数参数 | 描述 | 是否必需 |
|---|---|---|
| 变量名 | 函数计算值的引用名 | 否 |
界面如下图:

提示:
__machineIP函数同理。
(8)__threadNum函数
__threadNum函数:只是简单地返回当前线程的编号。
线程编号不依赖于线程组,这就意味着从函数的角度看来,某个线程组的线程#1和另一个线程组的线程#1是没有区别的。
该函数没有参数,这一函数不能用在任何配置元件中(如用户定义的变量),原因在于配置元件是由一个独立线程运行的。
另外在测试计划中使用也是没有意义的。
界面如下图所示:

4、总结
本篇文章中不演示每个函数的具体用法,因为函数具体的引用方式都相同,例如${函数名(具体参数)}。
如果需要了解JMeter中函数助手的具体使用示例,请参考上一篇文章【使用函数助手实现参数化】。
参考:
『动善时』JMeter基础 — 28、JMeter函数助手详解的更多相关文章
- 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求
目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...
- 『动善时』JMeter基础 — 8、JMeter主要元件介绍
目录 1.测试计划(Test Plan) 2.线程组 3.取样器(sampler) 4.逻辑控制器(Logic Controller) 5.配置元件(Config Element) 6.定时器(Tim ...
- 『动善时』JMeter基础 — 20、JMeter配置元件【HTTP Cookie管理器】详细介绍
目录 1.HTTP Cookie管理器介绍 2.HTTP Cookie管理器界面详解 3.JMeter中对Cookie的管理 (1)Cookie的存储 (2)Cookie的管理策略 4.补充:Cook ...
- 『动善时』JMeter基础 — 30、JMeter中JSON断言详解
目录 1.JSON断言组件界面详解 2.JSON断言组件的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 (3)JSON断言界面内容 (4)查看运行结果 (5)断言结果组件说明 3.JS ...
- 『动善时』JMeter基础 — 40、JMeter中ForEach控制器详解
目录 1.什么是逻辑控制器 2.ForEach控制器介绍 3.ForEach控制器的使用 (1)测试计划内包含的元件 (2)获取学院列表请求内容 (3)JSON提取器内容 (4)ForEach控制器内 ...
- 『动善时』JMeter基础 — 44、JMeter对数据库的更新操作
目录 1.执行一条insert语句 2.insert语句实现参数化 3.一次执行多条insert语句 4.使用Beanshell生成加密数据示例 (1)测试计划内包含的元件 (2)JDBC连接配置组件 ...
- 『动善时』JMeter基础 — 18、JMeter配置元件【计数器】
目录 1.计数器介绍 2.计数器界面详解 3.计数器的使用 (1)测试计划内包含的元件 (2)线程组界面内容 (3)计数器界面内容 (4)HTTP请求界面内容 (5)查看结果 1.计数器介绍 如果需要 ...
- 『动善时』JMeter基础 — 19、JMeter配置元件【随机变量】
目录 1.随机变量介绍 2.随机变量界面详解 3.随机变量的使用 (1)测试计划内包含的元件 (2)线程组界面内容 (3)随机变量界面内容 (4)HTTP请求界面内容 (5)查看结果 1.随机变量介绍 ...
- 『动善时』JMeter基础 — 22、JMeter中实现参数化(CSV)
目录 1.参数化的定义 2.什么情况下需要用到参数化 3.JMeter实现参数化的方式 4.CSV数据文件设置界面详细说明 (1)CSV数据文件设置组件界面说明 (2)补充说明:Recycle on ...
随机推荐
- 解决SQLPLUS无法使用上下箭头
1 问题描述 SQLPLUS中使用上下箭头无法获取历史命令,如下图所示: 按上下箭头会显示^[[A/^[[B. 2 解决方案 需要安装rlwrap,可以的话可以用包管理器安装,笔者环境CentOS,这 ...
- Vue学习笔记(三)
1 监听 在Vue.js中可以通过watch来监听数据的变化,比如通过watch实现的简单计数器: <div id="app"> <p>计数器:{{coun ...
- 『动善时』JMeter基础 — 1、JMeter介绍
1.什么是JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试.它最初被设计用于Web应用测试,但后来扩展到其他测试领域. (Apache ...
- 3. Linux基本结构与终端打开方法,关闭方法。
Linux基本机构: 应用程序 标准库 Linux操作系统内核 硬件 (上层依赖于下层) 终端工具: 打开方法: 1.点击图标 2.搜索命令:终端 退出终端: 1.exit<回车> 2.C ...
- docker文件系统分层存储原理
一,前言 众所周知,docker镜像技术的基础是联合文件系统(UnionFS),其文件系统是分层的,那它的分层机制是什么样的呢?共分为几种层呢?又是怎么工作的呢? 目前docker支持的联合文件系统有 ...
- 死磕到底RecyclerView | RecyclerView 的滚动是怎么实现的?
RecyclerView 是一个展示列表的控件,其中的子控件可以被滚动.这是怎么实现的?以走查源码的方式一探究竟. 切入点:滚动事件 阅读源码时,如何在浩瀚的源码中选择合适的切入点很重要,选好了能少走 ...
- SQLyog连接数据库报错 plugin caching_sha2_password could not be loaded
错误如图所示: 问题描述: 下载新版的 mysql 8.0.11 安装. 为了方便安装查看,我下载了sqlyog 工具 连接 mysql. 配置新连接报错:错误号码 2058 问题分析: mysql ...
- c#基于supersocket的简单websocket服务端收发消息实现
using log4net; using SuperSocket.SocketBase; using SuperSocket.WebSocket; using System; using System ...
- c#操作斑马打印机打印中文
需要引用fnthex32.dll插件,这个网上就能下到,注意分为两个版本,一个版本是8个参数,一个版本是9个参数,我这里用的是9个参数的. 首先用zebradesigner设计一个打印模板 差不多就长 ...
- 图扑软件正式加入腾讯智维生态发展计划,智能 IDC 开启数字经济新征程
4 月 23 日,主题为<智汇科技,维新至善>的腾讯数据中心智维技术研讨会在深圳胜利召开,发布了腾讯智维 2.0 技术体系,深度揭秘了智维 2.0 新产品战略和技术规划.图扑软件(High ...