Jmeter(二十四) - 从入门到精通 - JMeter函数 - 中篇(详解教程)
1.简介
在性能测试中为了真实模拟用户请求,往往我们需要让提交的表单内容每次都发生变化,这个过程叫做参数化。JMeter配置元件与前置处理器都能帮助我们进行参数化,但是都有局限性,为了帮助我们能够更好地进行参数化,JMeter提供了一组函数来帮助我们参数化生成需要的数据,这些函数可以函数助手面板来进行编辑。当然函数助手的功能不仅仅是做参数化,还能帮助我们运算、字符编码格式转换、获取运行时参数等功能。下面宏哥介绍和分享一下函数助手中的函数。
JMeter提供了很多函数,如果能够熟练使用,可以为脚本带来很多方便。可以很方便的实现一些小功能,几乎可以用于测试计划中的任何元件。
JMeter函数是一种特殊值,可用于除测试计划外的任何组件。
函数调用的格式如下所示:
${__functionName(var1,var2,var3)}
其中,“__”是两个英文半角的下划线,functionName为函数名,括号内是函数的参数,无参数时可以不用括号,如${__UUID},其中参数视不同函数而定。
Tips:
如果参数包含逗号,那么一定要使用“\”来转义,否则JMeter会把它当作一个参数分隔符
实际使用时,可通过函数助手对话框选择函数,设置参数后,点击生成按钮生成函数字符串。
2.JMeter 中的常用函数主要分为如下几类
上一篇中,我们介绍了前四种函数类型,这一篇我们将最后两种函数类型介绍和分享一下。
函数类型 | 函数名称 | 函数作用 | 启用版本 |
---|---|---|---|
脚本函数
|
__BeanShell |
执行 beanshell 脚本 | 1.X |
__javaScript |
执行 js 脚本 | 1.9 | |
字符串操作函数
|
__split |
根据分隔符拆分字符串为多个变量 | 2.0.2 |
__changeCase |
转换大小写 | 4.0 | |
__regexFunction |
使用正则表达式解析之前的响应结果 | 1.X | |
属性信息函数
|
__isPropDefined |
判断属性是否存在 | 4.0 |
__property |
对多个整数求和 | 1.8.1 | |
__P |
简化的属性函数,用于与命令行上定义的属性一起使用 | 2.0 | |
__setProperty |
简化的属性函数,用于与命令行上定义的属性一起使用 | 2.0 | |
数据输入函数
|
__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 | |
获取信息函数
|
__TestPlanName |
返回当前测试计划的名称 | |
__threadGroupName |
返回当前线程组的名称 | 4.1 | |
__threadNum |
返回当前正在执行的线程的编号 | 1.X | |
__samplerName |
返回当前请求的名称 | 2.5 | |
__log |
输出日志信息 | 2.2 | |
__time |
以多种格式返回当前时间 | 2.2 |
2.1 数据计算函数
2.1.1 __counter
作为一个计数器使用,支持多线程(多用户)。功能:这个函数是一个计数器,用于统计函数的使用次数,它从1开始,每调用这个函数一次它就会自动加1,它有两个参数,第一个参数是布尔型的, 只能设置成“TRUE”或者“FALSE”,如果是TRUE,那么每个用户有自己的计数器,可以用于统计每个线程歌执行了多少次。如果是FALSE,那就 使用全局计数器,可以统计出这次测试共运行了多少次。第二个参数是“函数名称”。
1、我们先来看看这个__counter长得是啥样子,路径:函数助手 > 选择__counter ,如下图所示:
2、关键参数说明
TRUE, for each user to have own counter, FALSE for a global counter:计数变量i,
Name of variable in which to store the result (optional):是否为线程计数器True/False
3、实例
${__counter(FALSE,i)}; 全局计数器
${__counter(TRUE,i)}; 每个用户有自己的计数器
注意:
- 每次调用该计数器函数都会产生一个新值,从1开始每次加1。
- 计数器既可以被配置成针对每个虚拟用户是独立的,也可以被配置成所有虚拟用户公用的。
- 如果每个虚拟用户的计数器是独立增长的,那么通常被用于记录测试计划运行了多少遍。全局计数器通常被用于记录发送了多少次请求。
- 计数器使用一个整数值来记录,允许的最大值为 2,147,483,647。
- 目前计数器函数实例是独立实现的(JMeter 2.1.1及其以前版本,使用一个固定的线程变量来跟踪每个用户的计数器,因此多个计数器函数会操作同一个值)。全局计数器(FALSE)的每个计数器实例都是独立维护的。
- 该函数也有对应的配置元件:计数器,功能类似。
2.1.2__intSum
整数求和,多个数字之间用逗号分隔。用于计算多个整数的和,可以是计算正整数和负整数的和,它有N个参数,最少有3个参数,最多不限。最后一个参数是函数名称,前面的其它参 数是要求和的整数。这个函数在函数对话框中只显示3个参数,如果要计算多个整数,可以通过添加参数实现,不过最后一个参数一定要是函数名称。再添加的参数 会在函数名称后面,这个时候,需要我们手动将函数名称参数放到最后一个。
1、我们先来看看这个__intSum长得是啥样子,路径:函数助手 > 选择__intSum ,如下图所示:
函数 __intSum
可以被用来计算两个或者更多整数值的和。至少需要两个整数,如果指定变量名则名称中必须包含一个非数字字母,否则它会被当成另一个整数值,而被函数用于计算。
注意:
在 4.0 版本之前,当有多个整数时,要通过点击添加按钮来增加参数,但是需要注意的是,添加完参数后,点击 生成
的函数默认是把手动添加的函数放在后面,这时需要手动调整变量名的位置,把它放到最后,否则会报错。 在 4.0 版本之后,该问题已解决。
4.0 之前版本添加多个整数示例如下:
2.1.3__longSum
该函数用来计算两个或更多长整型值的和,使用方法跟上面的 __intSum
函数一样,这里不再赘述。
1、我们先来看看这个__longSum长得是啥样子,路径:函数助手 > 选择__longSum ,如下图所示:
2、关键参数说明
函数参数 |
描述 |
是否必需 |
---|---|---|
第1个参数 |
第1个长整型值 |
是 |
第2个参数 |
第2个长整型值 |
是 |
第n个参数 |
第n个长整型值 |
否 |
最后一个参数 |
重用函数计算值的引用名。如果用户指 定了这一参数,那么引用名中必须包含一个 非数字字母,否则它会被当成另一个长整 型值,而被函数用于计算 |
否 |
3、实例
${__longSum(1,2,sum)}
2.1.4__Random
随机数函数返回指定最大值和最小值之间的随机整数。_Random函数是从某数据段随机读取数据替换参数,当需要添加多条数据记录且某些字段需要唯一性时使用,使用该函数随机生成的数据是数字。
Tips:一般在新增的时候,固定字符串后加个随机数,避免重复。当我们设置的线程数超过随机数范围时,随机数将会重复生成
1、我们先来看看这个__Random长得是啥样子,路径:函数助手 > 选择__Random ,如下图所示:
2、关键参数说明
一个范围内的最小值:即我们所要取的随机数的最小值,上述设置为1,生成的随机数将不会小于1
一个范围内允许的最大值:即我们所要取的随机数的最大值,上述设置为100,生成的随机数将不能超过100
Name of variable in which to store the result(optional)为函数名称名称:这里我们设置为random,即用于存储在测试计划中其他的方式使用的值
3、实例
返回 0--10 之间的随机整数:
${__Random(1,10,var)}
2.1.5__RandomDate
返回位于给定开始日期和结束日期值之间的随机日期。
1、我们先来看看这个__Randomdate长得是啥样子,路径:函数助手 > 选择__Randomdate,如下图所示:
2、关键参数说明
Format string for DateTimeFormatter (optional) (default yyyy-MM-dd):日期格式化方法,默认为yyyy-MM-dd;
Start date (optional) (default: now):为开始日期,格式必须和日期格式化方法一致,如格式化方法不填,则此处格式需为2018-02-03
,如不填则默认为现在;
End date:和Start date类似,但是此项必填;
String format of a locale (ex: fr_FR , en_EN) (optional):日期相关的地区信息,可以不填;
Name of variable in which to store the result (optional):参数名称,也可以不填;
3、实例
示例:
${__RandomDate(,,2050-07-08,,)} 随机返回一个从现在到 2050-07-08 的日期,例如 2039-06-21
${__RandomDate(dd MM yyyy,,08 07 2050,,)} 返回带有自定义格式的随机日期,如 04 03 2034
2.1.6_RandomString
根据给定的字符,生成指定长度的随机字符串。
1、我们先来看看这个__RandomString长得是啥样子,路径:函数助手 > 选择__RandomString ,如下图所示:
2、关键参数说明
Random string length
:生成的随机字符的长度
Chars to use for random string generation
:用来生成随机字符串的字符,可以是纯数字,纯字符,字符字母数字组合。
Name of variable in which to store the result (optional)
:保存结果的变量
3、实例
例如:${__RandomString(6,abcdefgh1234566,ranstr)}
随机生成一个6位长度的字符串,并保存在变量 ranstr 中,后续可以通过 ${ranstr}
来调用。
2.1.7__UUID
通用唯一标识符函数,生成一个32位不重复的随机字符串。
1、我们先来看看这个__UUID长得是啥样子,路径:函数助手 > 选择__UUID ,如下图所示:
2、示例:
${__UUID()}
返回结果类似:c69e0dd1-ac6b-4f2b-8d59-5d4e8743eecd
。
2.2获取信息函数
2.2.1__TestPlanName
用法:${__TestPlanName}
,返回当前测试计划的名称;
如:测试计划名称是 Demo.jmx
, 即返回 Demo.jmx
。注意:Save Test plan before calling __TestPlanName function(调用此函数时,必须先保存一个测试计划)
1、我们先来看看这个__TestPlanName长得是啥样子,路径:函数助手 > 选择__TestPlanName ,如下图所示:
2、实例
2.2.2__threadGroupName
用法:${__threadGroupName}
,返回当前线程组的名称,从 4.1 版本开始启用。
该函数不能用在任何配置元件中(如用户定义的变量),因为配置元件是由另外的独立线程运行的,它也不能在测试计划(Test Plan)中使用。
1、我们先来看看这个__threadGroupName长得是啥样子,路径:函数助手 > 选择__threadGroupName,如下图所示:
2.2.3__threadNum
用法:${__threadNum}
,返回当前正在执行的线程的编号,而且不依赖于线程组;
也就是说以这个函数的结果来看,不能区别线程组1的线程#1 和 线程组2的线程#1,如下图所示:
不能用在配置元件 和 测试计划中。
1、我们先来看看这个__threadNum长得是啥样子,路径:函数助手 > 选择__threadNum,如下图所示:
2.2.4__samplerName
用法:${__samplerName()}
,返回当前请求的名称。获取当前按sampler的名称。
1、我们先来看看这个__samplerName长得是啥样子,路径:函数助手 > 选择__samplerName ,如下图所示:
2.2.5__log
记录一条日志,并返回函数的输入字符串。
1、我们先来看看这个__log长得是啥样子,路径:函数助手 > 选择__log ,如下图所示:
可以设置不同的日志级别,如 OUT
和 ERR
将会分别输出记录到 System.out
和 System.err
中。在这种情况下,输出总是会被打印(它不依赖于当前的日志设置)。
示例:
${__log(Message)}:写入日志文件,形如 "...thread Name : Message"。
${__log(Message,OUT)}:写到控制台窗口。
${__log(${VAR},,,VAR=)}:写入日志文件,形如"...thread Name VAR=value"。
2.2.6__time
以多种格式返回当前时间;返回当前时间,可指定返回格式,由SimpleDateFormat类处理函数格式
- 年:yyyy
- 月:MM
- 日:dd
- 时:hh
- 分:mm
- 秒:ss
如果省略了格式字符串,那么函数会以毫秒的形式返回当前时间。其他情况下,当前时间会被转成简单日期格式。
jmeter 中默认定义的时间格式属性值有:
YMD = yyyyMMdd。
HMS = HHmmss。
YMDHMS = yyyyMMdd-HHmmss。
USER1 = JMeter属性time.USER1。
USER2 = JMeter属性time.USER2。
用户可以通过修改JMeter属性来改变默认格式,例如,time.YMD=yyMMdd。
1、我们先来看看这个__time长得是啥样子,路径:函数助手 > 选择__time ,如下图所示:
2、关键参数说明
Format string for DateTimeFormatter (optional) (default yyyy-MM-dd):日期格式化方法,默认为yyyy-MM-dd;
Name of variable in which to store the result (optional):参数名称,也可以不填;
3、实例
使用示例:
${__time()} 返回'1548133155699'
${__time(YMD,)} 返回'20190122'
${__time(dd/MM/yyyy,)} 返回'22/01/2019'
3.小结
好了,今天到这里JMeter5的函数中篇就介绍和分享完了,感谢您耐心的阅读和一路支持宏哥!!!
Jmeter(二十四) - 从入门到精通 - JMeter函数 - 中篇(详解教程)的更多相关文章
- Jmeter(二十八) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy1(详解教程)
1.简介 在使用jmeter自动录制脚本时会产生很多无用的请求,所以推荐使用badboy录制脚本之后保存为jmx文件,在jmeter中打开使用.因此宏哥在这里介绍一下Badboy这款工具,本来打算不做 ...
- Jmeter(二十九) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy2(详解教程)
1.简介 上一篇文中已经对Badboy做了一个基本上详细完整的介绍,这一篇宏哥带你们实战一下,这一篇主要讲解和分享:录制和运行脚本.参数化 首先让我们使用N模式录制一个脚本,测试用例编号为:1.1.1 ...
- Jmeter(十四) - 从入门到精通 - JMeter定时器 - 下篇(详解教程)
1.简介 用户实际操作时,并非是连续点击,而是存在很多停顿的情况,例如:用户需要时间阅读文字内容.填表.或者查找正确的链接等.为了模拟用户实际情况,在性能测试中我们需要考虑思考时间.若不认真考虑思考时 ...
- Jmeter(五十四) - 从入门到精通高级篇 - 如何在linux系统下运行jmeter脚本 - 上篇(详解教程)
1.简介 上一篇宏哥已经介绍了如何在Linux系统中安装Jmeter,想必各位小伙伴都已经在Linux服务器或者虚拟机上已经实践并且都已经成功安装好了,那么今天宏哥就来介绍一下如何在Linux系统下运 ...
- Jmeter(一) - 从入门到精通 - 环境搭建(详解教程)
1.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态和动态资源的性能,例如:静态文件, ...
- Jmeter(三十四) - 从入门到精通进阶篇 - 参数化(详解教程)
1.简介 前边三十多篇文章主要介绍的是Jmeter的一些操作和基础知识,算是一些初级入门的知识点,从这一篇开始我们就来学习Jmeter比较高级的操作和深入的知识点了.今天这一篇主要是讲参数化,其实前边 ...
- Jmeter(二十六) - 从入门到精通 - 搭建开源论坛JForum(详解教程)
1.简介 今天这篇文章主要是给大家讲解一下,如何部署测试环境,这里宏哥部署一个开源测论坛,后边的文章中会用到这个论坛,并且也看到童鞋们在群里讨论如何在开发将测试包发给你以后,你如何快速地部署测试环境. ...
- Jmeter(十六) - 从入门到精通 - JMeter前置处理器(详解教程)
1.简介 前置处理器是在发出“取样器请求”之前执行一些操作.如果将前置处理器附加到取样器元件,则它将在该取样器元件运行之前执行.前置处理器最常用于在取样器请求运行前修改其设置,或更新未从响应文本中提取 ...
- Jmeter(十八) - 从入门到精通 - JMeter后置处理器 -下篇(详解教程)
1.简介 后置处理器是在发出“取样器请求”之后执行一些操作.取样器用来模拟用户请求,有时候服务器的响应数据在后续请求中需要用到,我们的势必要对这些响应数据进行处理,后置处理器就是来完成这项工作的.例如 ...
随机推荐
- Jmeter系列(46)- Jmeter 中有哪些常用的函数
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 Jmeter 提供了很多函数 但 ...
- Jenkins(1)—— 部署安装
最近有聊到接口自动化,持续集成这方面,所以想从持续集成工具Jenkins作为切入点来学习一下 一.jenkins概念 Jenkins是一个开源的.可扩展的持续集成.交付.部署(软件/代码的编译.打包. ...
- Go | Go 语言打包静态文件以及如何与Gin一起使用Go-bindata
系列文章目录 第一章 Go 语言打包静态文件以及如何与Gin一起使用Go-bindata 目录 系列文章目录 前言 一.go-bindata是什么? 二.使用步骤 1. 安装 2. 使用 3. 读取文 ...
- 第3篇 Scrum 冲刺博客(专✌️团队)
目录 一.站立式会议 1.1 会议照片 1.2 成员完成情况 二.项目燃尽图 三.成员代码/文档签入记录 3.1 代码签入 3.2 Issue链接 3.3 CodeReview代码规范文档 四.最新项 ...
- Solr的原理及使用
1.Solr的简介Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过 ...
- 完美解决方案-雪花算法ID到前端之后精度丢失问题
最近公司的一个项目组要把以前的单体应用进行为服务拆分,表的ID主键使用Mybatis plus默认 的雪花算法来生成. 快下班的时候,小伙伴跑过来找我,:"快给我看看这问题,卡这卡了小半天了 ...
- 学生成绩管理系统(SSM+MySQL+JSP)
开发工具:Eclipse前端技术:基础:html+css+JavaScript框架:JQuery+H-ui后端技术:Spring+SpringMVC+mybatis模板引擎:JSP数据库:mysql ...
- [CSP-S2019]Emiya 家今天的饭 题解
CSP-S2 2019 D2T1 很不错的一题DP,通过这道题学到了很多. 身为一个对DP一窍不通的蒟蒻,在考场上还挣扎了1h来推式子,居然还有几次几乎推出正解,然而最后还是只能打个32分的暴搜滚粗 ...
- 02.RDB持久化配置与工作流程
一.如何配置RDB持久化机制 配置文件redis.conf save 60 1000 表示每隔60s,检查如果有超过1000个key发生了变更,那么就生成一个新的dump.rdb文件,就是当前redi ...
- [apue] 一图读懂 unix 文件句柄及文件共享过程
与文件相关的一些概念 在开始上图之前,先说明几个和 unix 文件密切相关的术语,方便后续讨论使用 文件句柄 / 文件描述符 (file descriptor 或 FD):描述一个打开文件相关属性的类 ...