【Jmeter】Jmeter:函数助手

版权声明:本文为博主原创文章,欢迎转载,转载须注明出处:By 故三殇 https://blog.csdn.net/qq_39720249/article/details/88790042

目录

一、Function Helper Dialog(函数助手对话框)

二、函数(68 个)

☆ __base64Decode

☆ __base64Encode

☆ __BeanShell

☆ __caseFormat

☆ __changeCase

☆ __char

☆ __chooseRandom

☆ __counter

☆ __CSVRead

☆ __dateTimeConvert

☆ __digest

☆ __doubleSum

☆ __env

☆ __escapeHtml

☆ __escapeOroRegexpChars

☆ __escapeXml

☆ __eval

☆ __evalVar

☆ __fifoGet

☆ __fifoPop

☆ __fifoPut

☆ __fifoSize

☆ __FileToString

☆ __groovy

☆ __if

☆ __intSum

☆ __isDefined

☆ __isPropDefined

☆ __isVarDefined

☆ __iterationNum

☆ __javaScript

☆ __jexl2

☆ __jexl3

☆ __log

☆ __logn

☆ __longSum

☆ __lowercase

☆ __machineIP

☆ __machineName

☆ __MD5

☆ __P

☆ __property

☆ __Random

☆ __RandomDate

☆ __RandomFromMultipleVars

☆ __RandomString

☆ __regexFunction

☆ __samplerName

☆ __setProperty

☆ __split

☆ __StringFromFile

☆ __strLen

☆ __strReplace

☆ __substring

☆ __TestPlanName

☆ __threadGroupName

☆ __threadNum

☆ __time

☆ __timeShift

☆ __tstFeedback

☆ __unescape

☆ __unescapeHtml

☆ __uppercase

☆ __urldecode

☆ __urlencode

☆ __UUID

☆ __V

☆ __XPath



一、Function Helper Dialog(函数助手对话框)

函数助手对话框:
1、函数助手对话框启用快捷键:Ctrl + Shift + F1
2、在性能测试过程中为了真实模拟用户请求,往往我们需要让提交的表单内容每次都发生变化,这个过程叫参数化。  
3、JMeter 配置元件与前置处理器都能帮我们进行参数化,但都有局限性,为了帮助我们更好地进行参数化,
JMeter 提供了一组函数来帮我们生成需要的数据,这些函数可以通过函数助手对话框来进行编辑。
4、当然,函数助手的功能不仅仅是做参数化,还可以帮助我们进行运算、字符编码格式转换、获取运行时参数
等功能。
5、函数调用都是以 ${__function()} 这种形式开始的,其中:
"__" 是英文半角两个下横线,function 是函数名,其中的参数视不同函数而定。
6、下面示例均以中文版为例。
 
// ************************* 【函数助手对话框】 参数说明 ************************* //
1、选择一个功能:函数下拉列表选择一个函数。 
(点击“帮助”按钮可以前往官网查看函数使用说明。)
[下拉框]
 
2、函数参数:从下拉列表中选择一个函数后,需为其参数设定值,不同函数要求的参数也不同。 
● 名称:函数参数的简要描述
● 值:供用户填充参数的值。
[输入框]

3、拷贝并黏贴函数字符串:提醒用户复制生成的内容,复制到取样器中进行参数化
● 生成:点击 “生成” 按钮,生成函数,方便复制。
● Reset Variables:重置变量,点击 “Reset Variables” 按钮,重置参数变量。
[输入框]

4、The result of the function is:函数的结果是
[输入框]

5、Current JMeter Variables:当前 JMeter 变量
[输入框]

 



二、函数(68 个)

☆ __base64Decode


☆ __base64Encode


☆ __BeanShell

__BeanShell:
1、JMeter 支持 BeanShell 脚本语言,JMeter 函数助手中提供 BeanShell 函数的支持。
2、BeanShell 函数入参可以是 BeanShell 语法的程序语句或者 BeanShell 脚本文件。
3、函数 __BeanShell 会执行传递给它的脚本,并返回结果。
4、关于 BeanShell 的详细资料,请参考 BeanShell 的 Web 站点:http://www.beanshell.org/ 。
5、需要注意,测试脚本中每一个独立出现的函数调用,都会使用不同的解释器,但是后续对函数调用的援引
会使用相同的解释器;这就意味着变量会持续存在,并跨越函数调用。
6、单个函数实例可以从多个线程调用。
另外,该函数的execute()方法是同步的。
如果定义了属性"beanshell.function.init",那么它会作为一个源文件传递给解释器。
7、这样就可以定义一些通用方法和变量。
在bin目录中有一个初始化文件的例子:BeanShellFunction.bshrc 。
8、如下变量在脚本执行前就已经设置:
(1)log:函数 BeanShell(*) 的记录器
(2)ctx:目前的 JMeter Context 变量
(3)vars:目前的 JMeter 变量
(4)props:JMeter 属性对象
(5)threadName:线程名(字符串)
(6)sampler:当前采样器(如果存在)
(7)sampleResult:当前采样器(如果存在)
(7)"*" 意味着该变量在 JMeter 使用初始化文件之前就已经设置了。
9、其他变量在不同调用之间可能会发生变化。

// ************************* 【__BeanShell】 参数说明 ************************* //
● Expression to evaluate
第 1 个参数:要计算的表达式

● Name of variable in which to store the result (optional)
第 2 个参数:存储结果的变量的名称(可选)

// ************************* 【__BeanShell】 示例补充 ************************* //
例如:

${__BeanShell(123*456)}:123*456 计算结果返回 56088

${__BeanShell(source("function.bsh"))}:行在 function.bsh 中的脚本;
// 请记得为文本字符串及代表文本字符串的 JMeter 变量添加必要的引号
函数参数 描述 是否必需
第 1 个参数 BeanShell 脚本:一个 BeanShell 脚本(不是文件名)
第 2 个参数 变量名:重用函数计算值的引用名

☆ __caseFormat


☆ __changeCase


☆ __char

__char:
1、功能是把一组数字转化成 Unicode 字符,比如我们输入 65、66 两个数字,那么转成 Unicode 码就应该是 A 、B 两个字母。
2、char 函数接受多个数字。
3、函数 __char 会将一串数字翻译成 Unicode 字符,另外还请参考 __unescape() 函数。
4、Unicode字符编码(十进制数或者十六进制数) 待转换的Unicode字符编码,可以是十进制数或者十六进制数。
// 例如:
// ${__char(0xC,0xA)} = CRLF
// ${__char(165)} = � (yen)

// ************************* 【__char】 参数说明 ************************* //
● 变量的名称
第 1 个参数:变量的名称
函数参数 描述 是否必需
Unicode字符编码(十进制数或者十六进制数) 待转换的Unicode字符编码,可以是十进制数或者十六进制数

☆ __chooseRandom


☆ __counter

__counter:
1、__counter 可以作为一个计数器使用,支持多线程(可以理解成多用户)。
// 比如有线程 1 与 2 ,这个计数器可以分开记录线程迭代的次数,也可以把两个线程的迭代次数合在一起记录。
2、每次调用计数器函数都会产生一个新值,从1开始每次加1。
3、计数器既可以被配置成针对每个虚拟用户是独立的,也可以被配置成所有虚拟用户公用的。
4、如果每个虚拟用户的计数器是独立增长的,那么通常被用于记录测试计划运行了多少遍。
5、全局计数器通常被用于记录发送了多少次请求,计数器使用一个整数值来记录,允许的最大值为:2,147,483,647。
6、目前计数器函数实例是独立实现的;全局计数器(FALSE)每个计数器实例都是独立维护的。
// JMeter 2.1.1及其以前版本,使用一个固定的线程变量来跟踪每个用户的计数器,因此多个计数器函数会操作同一个值。

// ************************* 【__counter】 参数说明 ************************* //
● TRUE, for each user to have own counter, FALSE for a global counter
第 1 个参数:如果每个用户都有自己的计数器,则为 true ;如果是全局计数器,则为 false

● Name of variable in which to store the result (optional)
第 2 个参数:存储结果的变量的名称(可选)
函数参数 描述 是否必须
第1个参数

1、True,如果希望每个虚拟用户的计数器保持独立,与其他用户的计数器相区别;

2、false,全局计数器;

第2个参数

1、重用计数器函数创建值的引用名。

2、测试人员可以这样引用计数器的值:${refName}。

3、这样一来,测试人员就可以创建一个计数器后,在多个地方引用它的值


☆ __CSVRead

__CSVRead:
1、__CSVRead 可以从文件中读取指定列的值,功能有 3 个:
(1)读取固定值
// 例如:读取第 0 列(实际是第 1 列,编号从 0 开始),多次迭代时值是不会改变的,还是取第一行第一列。
(2)读取动态值
// 例如:如果想要每次迭代时取值不一样,可以用到类似 ${_CSVRead (D:\testvalue.txt,next())} 这样的表达式,
// next() 会告知程序下次迭代取下一行数据。
(3)可以使用文件别名
// 例如:我们使用 testfile 作为 D:\testvalue.txt 文件的别名,在 Java 请求中我们可以使用
// ${__CSVRead  (*testfile,1)} 来读取 D:\testvalue.txt 中的值。
2、函数 __CSVRead 会从 CSV 文件读取一个字符串(请注意与 StringFromFile 的区别)。
3、JMeter 1.9.1 以前的版本仅支持从单个文件中读取,JMeter 1.9.1 及其以后版本支持从多个文件中读取。
在大多数情况下,新配置元件 CSV Data Set 更好用一些。
4、当对某文件进行第一次读取时,文件将被打开并读取到一个内部数组中;
如果在读取过程中找到了空行,函数就认为到达文件末尾了,即允许拖尾注释( JMeter 1.9.1 版本引入);
后续所有对同一个文件名的引用,都使用相同的内部数组。
5、另外,文件名大小写对函数调用很重要,哪怕操作系统不区分大小写,
CSVRead(abc.txt,0) 和 CSVRead(aBc.txt,0) 会引用不同的内部数组;
使用 *ALIAS 特性可以多次打开同一个文件,另外还能缩减文件名称。
6、每一个线程都有独立的内部指针指向文件数组中的当前行;
当某个线程第一次引用文件时,函数会为线程在数组中分配下一个空闲行;
如此一来,任何一个线程访问的文件行,都与其他线程不同(除非线程数大于数组包含的行数)。
7、默认下,函数会在遇到每一个逗号处断行;如果希望在输入列中使用逗号,那么需要换一个分隔符
(设置属性 csvread.delimiter 实现,且该符号没有在 CSV 文件任何列中出现。

// ************************* 【__CSVRead】 参数说明 ************************* //
● CSV file to get values from | *alias
第 1 个参数:从*别名的 csv 文件获取值

● Column number of CSV file | next | *alias
第 2 个参数:*别名的 csv 文件的下一列列号


// ************************* 【__CSVRead】 示例补充 ************************* //
例如,可以用如下参数来设置某些变量:

● COL1a ${__CSVRead(random.txt,0)}   

● COL2a {__CSVRead(random.txt,1)}{__CSVRead(random.txt,next)}  

● COL1b ${__CSVRead(random.txt,0)}   

● COL2b {__CSVRead(random.txt,1)}{__CSVRead(random.txt,next)} 
  
(1)上面例子会从一行中读取两列,接着从下一行中读取两列。
(2)如果所有变量都在同一个前置处理器中(用户参数上定义),那么行都是顺序读取的。
(3)否则,不同线程可能会读取不同的行。
(4)这一函数并不适合于读取很大的文件,因为整个文件都会被存储到内存之中。
(5)对于较大的文件,请使用配置元件 CSV Data Set 或者 StringFromFile 。
函数参数 描述 是否必需
第 1 个参数 文件名:设置从哪个文件读取(或者*ALIAS)
第 2 个参数

1、列数:从文件的哪一列读取。

2、0 = 第一列, 1 = 第二列,依此类推。

3、next:为走到文件的下一行。

4、*ALIAS:为打开一个文件,并给它分配一个别名。


☆ __dateTimeConvert


☆ __digest


☆ __doubleSum


☆ __env


☆ __escapeHtml

__escapeHtml:
1、把字符转换成 Html 格式的字符,比如引号转成 HTML 就是 " ,比如空格就是   ,
这样编码后传给浏览器,浏览器就能够识别引号与空格了。
2、函数 __escapeHtml 用于转义字符串中的字符(使用HTML实体)。
3、支持HTML 4.0实体。
// 例如:"bread" & "butter"变为"bread" & "butter"。

// ************************* 【__escapeHtml】 参数说明 ************************* //
● 变量的名称
第 1 个参数:变量的名称
函数参数 描述 是否必需
第 1 个参数 待转义字符串

☆ __escapeOroRegexpChars

__escapeOroRegexpChars:
1、帮我们把正则表达式转换成 Java 正则引擎能够识别的表达式,使用支持 Perl5 的 ORO 正则表达式库来编译。
2、说得比较绕口,通俗点说就是把一些 Java 正则表达式引擎不识别的正则式转换一下,这样就可以识别了;
转换过程中使用了 ORO 正则表达式库,这个库也支持 Perl5 兼容的正则表达式语法。 
3、Perl 是一种高级、通用、直译式、动态的脚本语言,内部集成了正则表达式的功能。

// ************************ 【__escapeOroRegexpChars】 参数说明 ************************ //
● Value to escape from ORO Regexp meta chars
第 1 个参数:要从 oro regexp 元字符转义的值

● 存储结果的变量名(可选)
第 2 个参数:存储结果的变量名(可选)

☆ __escapeXml


☆ __eval

__eval:
1、用来返回一个表达式的值,也就是可以用此函数表达式来嵌套引用表达式。
2、函数 __eval 可以用来执行一个字符串表达式,并返回执行结果。
3、如此一来,用户就可以对字符串(存储在变量中)中的变量和函数引用做出修改。
// 例如,给定变量 name = Smith、column = age、table = birthdays、SQL = select columnfrom{table} where name = '${name}',
// 那么通过 {__eval({SQL})} ,就能执行 "select age from birthdays where name='Smith'"。
// 这样一来,就可以与 CSV 数据集相互配合;
// 例如:将SQL语句和值都定义在数据文件中。

// ************************* 【__eval】 参数说明 ************************* //
● 变量的名称
第 1 个参数:变量的名称

☆ __evalVar

__evalVar:
1、函数__evalVar可以用来执行保存在变量中的表达式,并返回执行结果,并把结果存入一个变量,供 Sampler 引用。
2、如此一来,用户可以从文件中读取一行字符串,并处理字符串中引用的变量。
// 例如,假设变量 "query" 中包含有 "select columnfrom{table}",
// 而 "column" 和 "table" 中分别包含有 "name" 和 "customers" ,
// 那么 ${__evalVar(query)} 将会执行 "select name from customers"。
3、__evalVar 支持嵌套表达式。

// ************************* 【__evalVar】 参数说明 ************************* //
● 变量的名称
第 1 个参数:变量的名称
函数参数 描述 是否必需
第 1 个参数 变量名:待执行变量名

☆ __fifoGet


☆ __fifoPop


☆ __fifoPut


☆ __fifoSize


☆ __FileToString

__FileToString:
1、用来读取文件,它可以一次性读取文件内容,然后保存到变量;此变量之后可以由其他 Sampler 引用。
2、函数 __FileToString 可以被用来读取整个文件。每次对该函数的调用,都会读取整个文件。
3、如果在打开或者读取文件时发生错误,那么函数就会返回字符串 "**ERR**" 。

// ************************* 【__FileToString】 参数说明 ************************* //
● 变量的名称
第 1 个参数:变量的名称

● File encoding if not the platform default (opt)
第 2 个参数:文件编码如果不是平台默认值(opt)

● 存储结果的变量名(可选)
第 3 个参数:存储结果的变量名(可选)
函数参数 描述 是否必需
第 1 个参数 文件名:包含路径的文件名(路径可以是相对于JMeter启动目录的相对路径)
第 2 个参数

文件编码方式(如果不采用平台默认的编码方式):

1、读取文件需要用到的文件编码方式。

2、如果没有指明就使用平台默认的编码方式。

第 3 个参数 变量名:引用名(refName)用于重用函数创建的值

☆ __groovy


☆ __if


☆ __intSum

__intSum:
1、用来对整数求和,支持多个整数累加,多个数之间用逗号分隔。
2、函数 __intSum 可以被用来计算两个或者更多整数值的合。
// JMeter 2.3.1及其以前版本,要求必须有引用名参数。
// 后续JMeter版本中,引用名是可选的参数,但是引用名不能是整数值。

// ************************* 【__intSum】 参数说明 ************************* //
● First int to add.
第 1 个参数:要添加的第一个int。

● Name of variable in which to store the result (optional)
第 2 个参数:存储结果的变量的名称(可选)

● Name of variable in which to store the result (optional)
第 n 个参数:存储结果的变量的名称(可选)

● Name of variable in which to store the result (optional)
最后 1 个参数:存储结果的变量的名称(可选)
函数参数 描述 是否必须
第1个参数 第1个整数值
第2个参数 第2个整数值
第n个参数 第n个整数值
最后1个参数

1、重用函数计算值的引用名。

2、如果用户指定了这一参数,那么引用名中必须包含一个非数字字母,否则它会被当成另一个整数值,而被函数用于计算


☆ __isDefined


☆ __isPropDefined


☆ __isVarDefined


☆ __iterationNum


☆ __javaScript

__javaScript:
1、此函数可以用来返回 JavaScript 脚本的执行结果,也可以调用 JavaScript 中的库函数(JavaScript 类库提供的函数)。  
2、${__javaScript(3*10,sum)} ,引用了一个简单的 javaScript(3*10) 语句。
3、函数 __javaScript 可以用来执行 JavaScript 代码片段(非 Java ),并返回结果值。
4、JMeter 的 _javaScript 函数会调用标准的 JavaScript 解释器。
5、JavaScript 会作为脚本语言使用,因此测试人员可以做相应的计算。
6、在脚本中可以访问如下一些变量:
● Log:该函数的日志记录器
● Ctx:JmeterContext对象
● Vars:JmeterVariables对象
● threadName:字符串包含当前线程名称 // 在 2.3.2 版本中它被误写为"theadName"
● sampler:当前采样器对象(如果存在)
● sampleResult:前面的采样结果对象(如果存在)
● props:JMeter 属性对象
● Rhinoscript允许通过它的包对象来访问静态方法
// 例如,用户可以使用如下方法访问JMeterContextService静态方法:
// Packages.org.apache.jmeter.threads.JMeterContextService.getTotalThreads()
7、JMeter 不是一款浏览器,它不会执行从页面下载的 JavaScript。
8、注意:记得为文本字符串添加必要的引号。
9、另外,如果表达式中有逗号,请确保对其转义。
// 例如:${__javaScript('${sp}'.slice(7\,99999))},对7之后的逗号进行了转义。

// ************************* 【__javaScript】 参数说明 ************************* //
● Name of variable in which to store the result (optional)
第 1 个参数:变量名/存储结果的变量的名称(可选)

● Name of variable in which to store the result (optional)
第 n 个参数:变量名/存储结果的变量的名称(可选)
函数参数 描述 是否必需
变量名 重用函数计算值的引用名
JavaScript代码片段

1、待执行的JavaScript代码片段;

2、例如:

● new Date():返回当前日期和时间

● Math.floor(Math.random()*(${maxRandom}+1)):在0和变量maxRandom之间的随机数

● ${minRandom}+Math.floor(Math.random()*(maxRandom−maxRandom−{minRandom}+1)):

在变量 minRandom和maxRandom之间的随机数

● "${VAR}"=="abcd"


☆ __jexl2

☆ __jexl3

 

__jexl:
1、JMeter 提供对 JEXL 表达式的支持,JEXL 全称 Jakarta Commons Jexl,它是一种表达式语言
( Java Expression Language)解释器, Commons Jexl 是对 JSP 表达式语言的一种扩充,
并不依赖于  ServletAPI ,所以它可以被集成到任何需要表达式语言的应用程序中。

2、__jexl 是 JEXL1.0 的版本,jexl2 是 JEXL2.0 的版本。 

3、JMeter 中部分变量能够被 jexl 直接访问:
● log:函数记录器,直接调用 logger 函数。 
● ctx:获取 JMeterContent 对象。 
● vars:获取 JMeter 定义的变量,获取 JMeterVariables 对象。 
● props: 获取 JMeter 配置属性对象。 
● threadName:获取 JMeter 线程名,字符串包含当前线程名称 (在2.3.2 版本中它被误写为"theadName")。 
● sampler:获取 Sampler 实例,当前的采样器对象(如果存在)。
● sampleResult: 获取 SamplerResult 实例,前面的采样结果对象(如果存在)。
● OUT:类似 System.out.println ,OUT.println() 。
// OUT - System.out,例如: OUT.println("message")

4、JEXL 可以基于它们来创建类,或者调用方法,例如:
● Systemclass = log.class.forName("java.lang.System")
● now = Systemclass.currentTimeMillis()
// 需要注意的是,Web 站点上的 JEXL 文档错误地建议使用 "div" 做整数除法。
// 事实上 "div" 和 "/" 都执行普通除法。
// JMeter 2.3.2 以后的版本允许在表达式中包含多个声明。
// JMeter 2.3.2 及其以前的版本只处理第一个声明(如果存在多个声明,就会记录一条警告日志)。

5、函数 __jexl 可以用于执行通用 JEXL 表达式,并返回执行结果。
// 可以从下面这两个网址获取更多关于 JEXL 的信息:
// ● http://commons.apache.org/jexl/reference/syntax.html
// ● http://commons.apache.org/jexl/reference/examples.html#Example_Expressions

// ************************* 【__jexl】 参数说明 ************************* //
● JEXL expression to evaluate
第 1 个参数:要计算的 jexl 表达式

● Name of variable in which to store the result (optional)
第 2 个参数:变量名/存储结果的变量的名称(可选)
函数参数 描述 是否必需
第 1 个参数 表达式:待执行的表达式。例如,6*(5+2)
第 2 个参数 变量名:待设置变量名

☆ __log

__log:
1、日志方法,返回输入的字符串信息。
// 例如:输入字符串是 "testing",那么正常返回即是 "testing"。
2、函数 __log 会记录一条日志,并返回函数的输入字符串。

// ************************* 【__log】 参数说明 ************************* //
● String to be logged (and returned)
第 1 个参数:要记录(和返回)的字符串
(1)将会被日志输出的字符串 //如上面的 testing 。
(2)当然 log 不仅仅是这个功能,它可以写日志。

● Log level (default INFO) or OUT or ERR
第 2 个参数:日志级别(默认信息)或out或err
(1)用来指定日志输出的级别,日志级别有 OUT,ERR,DEBUG,INFO (default) ,WARN or ERROR 。
(2)OUT:  在控制台打印出来 (点击快捷菜单栏的 △0(带感叹号“!”的三角形) 按钮,在 GUI 中打开控制台),
另外也会打印到标准输出窗口(在 Windows 下我们运行 JMeter 时会有一个标准输出窗口),
类似 Java 中的 System.out.print() 。
(3)ERR: 在控制台输出日志信息,同时也打印到标准输出,类似 Java 中的 System.err 。 
(4)DEBUG: 在控制台输出日志信息,DEBUG 级别以上的都将打印,可以参考 Log4j 。 
(5)INFO: 在控制台打印 INFO 及 ERROR 级别的日志。
(6)WARN:在控制台打印 WARN 、INFO 、ERROR 级别的日志。
(7)ERROR: 在控制台仪打印 ERROR 日志。
(8)另外对于 DEBUG 、INFO 、WARN、ERROR 级别的日志还可能会写入 JMeter 的运行时日志
(这要看是否已经配置,主要通过配置 jmeter. properties 文件中的日志选项)。

● Throwable text (optional)
第 3 个参数:抛出的异常信息(可选)

● Additional comment (optional)
第 4 个参数:附加的备注信息(可选)
函数参数 描述 是否必需
第 1 个参数 待记录字符串:一个字符串
第 2 个参数 日志级别:OUT、ERR、DEBUG、INFO(默认)、WARN或者ERROR
第 3 个参数 可抛弃的文本:如果非空,会创建一个可抛弃的文本传递给记录器
第 4 个参数 注释:如果存在,注释会在字符串中展示,用于标识日志记录了什么

☆ __logn

__logn:
1、与 log 类似,不过它只记录一条日志,不返回值而已。
2、函数 __logn 会记录一条日志,并返回空字符串。

// ************************* 【__logn】 参数说明 ************************* //
● String to be logged
第 1 个参数:要记录的字符串

● Log level (default INFO) or OUT or ERR
第 2 个参数:日志级别(默认信息)或 out 或 err

● Throwable text (optional)
第 3 个参数:可丢弃文本(可选)

// ************************* 【__logn】 示例补充 ************************* //
1、OUT 和 ERR 的日志级别,将会分别导致输出记录到 System.out 和 System.err 中。
2、在这种情况下,输出总是会被打印(它不依赖于当前的日志设置)。
3、例如:{__logn(VAR1={VAR1},OUT)}:将变量值写到控制台窗口中。
函数参数 描述 是否必需
第 1 个参数 待记录字符串:一个字符串
第 2 个参数 日志级别:OUT,ERR,DEBUG, INFO(默认),WARN 或者ERROR
第 3 个参数 可抛弃的文本:如果非空,会创建一个可抛弃的文本传递给记录器

☆ __longSum

__longSum:
1、与 __intSum 类同,只不过把整数变成了长整型,在此不述。
2、函数 __longSum 可以被用来计算两个或者更多长整型值的合。

// ************************* 【__longSum】 参数说明 ************************* //
● First long to add
第 1 个参数:第一个要添加的长整型值

● Second long to add - further longs can be summed by adding further arguments.
第 2 个参数:第二个要添加的长整型值-可以通过添加更多的参数来求和更多的长整型值。

● ...
第 n 个参数:第 n 个要添加的长整型值-可以通过添加更多的参数来求和更多的长整型值。

● Name of variable in which to store the result (optional)
最后 1 个参数:存储结果的变量的名称(可选)
函数参数 描述 是否必需
第1个参数 第 1 个长整型值
第2个参数 第 2 个长整型值
n个参数 第 个长整型值
最后1个参数

1、重用函数计算值的引用名。

2、如果用户指定了这一参数,那么引用名中必须包含一个非数字字母,否则它会被当成另一个长整型值,而被函数用于计算


☆ __lowercase


☆ __machineIP

__machineIP:
1、该函数引用返回本机 IP ,我们在 Java 请求中引用此函数,引用方式有两种,一种带参数名一种不带参数名,都可以返回本机 IP 。
2、如果带参数名,此参数还可以被其他的 Sampler 引用。

// ************************* 【__machineIP】 参数说明 ************************* //
● 变量的名称
第 1 个参数:变量的名称

☆ __machineName

__machineName:
1、该函数返回本机的主机名。
2、引用时可以带参数名也可以不带,如果带参数名,此参数还可以被其他的取样器引用。

// ************************* 【__machineName】 参数说明 ************************* //
● Name of variable in which to store the result (optional)
第 1 个参数:变量名/存储结果的变量的名称(可选)
函数参数 描述 是否必需
第1个参数 重用函数计算值的引用名

☆ __MD5


☆ __P

__P:
1、获取属性的函数,可以获取命令行中定义的属性,默认值为 1 。
// 例如:我们在命令窗口打开 JMeter 且设置 group1.threads = 7 ,我们在打开的 JMeter GUI 中可以获取到此参数。
// 在非 GUI 方式运行测试计划时这个函数可用来做参数化,由运行命令动态指定参数值,
// 方便我们与 Jenkins 、Maven 或者 Ant 进行集成未完成性能测试自动化工作。
2、函数 __P 是一个简化版的属性函数,目的是使用在命令行中定义的属性。
3、不同于函数 __property ,本函数没有提供选项用于设置保存属性值的变量。
4、另外,如果没有设置默认值,默认值自动设为 1 。
5、之所以选择 1 ,原因在于它对于很多常见测试变量都是一个合理值,例如:循环次数、线程数、启动线程耗时间等。
// 例如:
// 定义属性值:
// jmeter -Jgroup1.threads=7 -Jhostname1=www.realhost.edu
// 获取值如下:
// ${__P(group1.threads)} :返回属性 group1.threads 的值
// ${__P(group1.loops)} :返回属性 group1.loops 的值
// ${__P(hostname,www.dummy.org)} :返回属性 hostname 的值,如果没有定义该属性则返回值 www.dummy.org
// 第一个函数调用返回 7 ,第二个函数调用返回 1 ,而最后一个函数调用返回 www.dummy.org(除非这些属性在其他地方有定义)

// ************************* 【__P】 参数说明 ************************* //
● Name of property
第 1 个参数:属性名

● Default value
第 2 个参数:默认值
函数参数 描述 是否必需
第 1 个参数 属性名:获取属性值、所需的属性名
第 2 个参数

1、默认值:属性未定义时的默认值。

2、如果省略此参数,默认值自动设为 1 。


☆ __property

__property:
1、该函数用来获取 JMeter 的属性,我们打开文件 %JMETER_HOME%\bin\jmeter.properties ,
在此我们已设置 JMeter 的各项属性,通过这个函数我们可以获取到在此设置的属性值。
// 例如:如果在 jmeter.properties 中设置的日志级别是 INFO ,所以: 
// {$__property(log_level.jmeter,logLevel,)}获取的将会是 INFO 。
2、另外我们把日志级别保存到了 logLevel 变量中,此变量也可以被其他的取样器进行调用。
3、函数 __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"),但是并不保存函数的返回值

// ************************* 【__property】 参数说明 ************************* //
● Name of property
第 1 个参数:属性名

● Column number of CSV file | next | *alias
第 2 个参数:*别名的 csv 文件的下一列列号

● Default value
第 3 个参数:默认值
函数参数 描述 是否必需
第 1 个参数 属性名:获取属性值、所需的属性名
第 2 个参数 变量名:重用函数计算值的引用名
第 3 个参数 默认值:属性未定义时的默认值

☆ __Random

__Random:
1、随机数函数,用此函数可以生成一个一定范围内的随机数并保存到指定变量,此变量可以被其他的取样器引用。
2、函数 __Random 会返回指定最大值和最小值之间的随机数。

// ************************* 【__Random】 参数说明 ************************* //
● Name of variable in which to store the result (optional)
第 1 个参数:变量名/存储结果的变量的名称(可选)

● The maximum value allowed for a range of values
第 2 个参数:一个值范围允许的最大值

● Name of variable in which to store the result (optional)
第 3 个参数:变量名/存储结果的变量的名称(可选)
函数参数 描述 是否必需
最小值 最小数值
最大值 最大数值
变量名 重用函数计算值的引用名

☆ __RandomDate


☆ __RandomFromMultipleVars


☆ __RandomString

__RandomString:
1、随机字符串函数,支持中文。
2、用此函数我们可以生成指定长度的随机字符串并保存到指定变量,此变量可以被其他的 Sampler 引用。

// ************************* 【__Random】 参数说明 ************************* //
● Random string length
第 1 个参数:随机字符串长度

● Chars to use for random string generation
第 2 个参数:用于随机字符串生成的字符

● 存储结果的变量名(可选)
第 3 个参数:变量名/存储结果的变量的名称(可选)
函数参数 描述 是否必需
第 1 个参数 表示希望生成的字符串的长度
第 2 个参数

表示从这些字符中随机组合,同个字可能会重复

第 3 个参数 变量名称,表示生成的字符串保存在这个变量中

☆ __regexFunction

__regexFunction:
1、正则表达式提取函数,此函数用来正则匹配上一个取样器的返回值。
2、正则表达式函数可以使用正则表达式(用户提供的)来解析前面的服务器响应(或者是某个变量值),
函数会返回一个有模板的字符串,其中携带有可变的值。
3、__regexFunction 还可以被用来保存值,以便供后续使用。

// ************************* 【__regexFunction】 参数说明 ************************* //
● Base64 string to be decoded
第 1 个参数:要解码的base64字符串

● Template for the replacement string, using groups from the regular expression. Format is $[group]$. 
Example $1$.
第 2 个参数:替换字符串的模板,使用正则表达式中的组。格式为$[组]$。
例如 1 美元。

● Which match to use. 
An integer 1 or greater,RAND to indicate JMeter should randomly choose, 
A float, or ALL indicating all matches should be used ([1])
第 3 个参数:哪个匹配使用。
整数 1 或更大,RAND 表示 JMeter 应该随机选择,一个 float 或 all 表示应该使用所有匹配项([1])

● Between text. 
If ALL is selected, the between text will be used to generate the results ([""])
第 4 个参数:在文本之间。
如果全部选中,中间文本将用于生成结果([“”])

● Default text. 
Used instead of the template if the regular expression finds no matches ([""])
第 5 个参数:默认文本。
如果正则表达式找不到匹配项([“”])则使用,而不用模板

● Name of variable in which to store the result (optional)
第 6 个参数:存储结果的变量的名称(可选)

● Input variable name containing the text to be parsed ([previous sample])
第 7 个参数:包含要分析的文本的输入变量名([上一个示例])


// ************************* 【__regexFunction】 参数补充 ************************* //
在函数的第 6 个参数中,可以指定一个引用名;在函数执行以后,可以使用用户定义值的语法来获取同样的值。
// 例如,如果输入"refName"作为第 6 个参数,那么可以使用:
// ${refName} 来引用第 2 个参数(Template for the replacement string)的计算结果,这依赖于函数的解析结果
// ${refName_g0} 来引用函数解析后发现的所有匹配结果
// ${refName_g1} 来引用函数解析后发现的第一个匹配组合
// ${refName_g#} 来引用函数解析后发现的第n个匹配组合
// ${refName_matchNr} 来引用函数总共发现的匹配组合数目
函数参数 描述 是否必需
第1个参数

1、第 1 个参数是用于解析服务器响应数据的正则表达式,它会找到所有匹配项;

2、如果希望将表达式中的某部分应用在模板字符串中,一定记得为其加上圆括号。

(1)例如,<a href="(.*)">,

这样就会将链接的值存放到第一个匹配组合中(这里只有一个匹配组合)。

(2)又如,<input type="hidden"name="(.*)"value="(.*)">,

在这个例子中,链接的name作为第一个匹配组合,链接的value会作为第二个匹配组合,

这些组合可以用在测试人员的模板字符串中。

第2个参数

1、这是一个模板字符串,函数会动态填写字符串的部分内容。

2、要在字符串中引用正则表达式捕获的匹配组合,请使用语法:$[group_number]$。

例如:$1$ 或者 $2$。

3、测试人员的模板可以是任何字符串

第3个参数

1、第3个参数告诉 JMeter 使用第几次匹配。

2、测试人员的正则表达式可能会找到多个匹配项。

3、对此,测试人员有 4 种选择:

● 整数:直接告诉 JMeter 使用第几个匹配项,“1” 对应第一个匹配,“2” 对应第二个匹配,以此类推

● RAND:告诉 JMeter 随机选择一个匹配项

● ALL:告诉 JMeter 使用所有匹配项,为每一个匹配项创建一个模板字符串,并将它们连接在一起

● 浮点值 0 到 1 之间:根据公式(找到的总匹配数目*指定浮点值)计算使用第几个匹配项,计算值向最近的整数取整

否,默认值为1
第4个参数

如果在上一个参数中选择了 “ALL”,那么这第 4 个参数会被插入到重复的模板值之间

第5个参数 如果没有找到匹配项返回的默认值
第6个参数 重用函数解析值的引用名,参见上面内容
第7个参数

1、输入变量名称。

2、如果指定了这一参数,那么该变量的值就会作为函数的输入,而不再使用前面的采样结

果作为搜索对象


☆ __samplerName

__samplerName:
该函数用来获取当前 Sampler 的名称。

// ************************* 【__samplerName】 参数说明 ************************* //
● 变量的名称
第 1 个参数:变量的名称

☆ __setProperty

__setProperty:
1、该函数用来动态设置 JMeter 属性。
2、函数的默认返回值是空字符串,因此该函数可以被用在任何地方,只要对函数本身调用是正确的。
3、通过将函数可选的第 3 个参数设置为"true",函数就会返回属性的原始值。
4、属性对于 JMeter 是全局的,因此可以被用来在线程和线程组之间通信。

// ************************* 【__setProperty】 参数说明 ************************* //
● 属性名称
第 1 个参数:属性名称

● XPath expression to match against 
第 2 个参数:要匹配的xpath表达式

● Return Original Value of property (default false)?
第 3 个参数:是否返回属性的原始值/是否返回函数结果(默认为否)?
【默认为 false,不返回;如果填入 true ,则返回。】
函数参数 描述 是否必需
第 1 个参数 属性名:待设置属性名
第 2 个参数 属性值:属性的值
第 3 个参数 True/False:是否返回属性原始值

☆ __split

__split:
1、该函数用来拆分字符串。
2、String to sp1it: 用来拆分的字符串; 
3、函数名称,用于存储在测试计划中其他的方式使用的值:拆分的字符串引用的变量名。 
4、String to sp1it on. Default is ,(comma): 分隔字符,默认是逗号。 
5、拆分后的字符存入变景中,此变量类似一个字符串数组。

☆ __StringFromFile

__StringFromFile:
1、该函数从文件中读取内容,一行一行地读取,类似于 CSV Data Set Config 元件:;当读完以后会重头开始。
2、每调用此函数一次将打开一次文件,这样效率似乎不太高。
3、__regexFunction 还可以被用来保存值,以便供后续使用。
4、__StringFromFile 可以被用来从文本文件中读取字符串,这对需要大量可变数据的测试很有用。
例如,当测试一个银行系统时,测试人员可能需要100条甚至1000条账户信息。
5、使用配置元件 CSV Data Set Config ,也能达到相同的目的,而且方法更简单,但是该配置元件目前不支持多输入文件。
6、每次调用函数,都会从文件中读取下一行。
当到达文件末尾时,函数又会从文件开始处重新读取,直到最大循环次数。
如果在一个测试脚本中对该函数有多次引用,那么每一次引用都会独立打开文件,即使文件名是相同的
(如果函数读取的值,在脚本其他地方也有使用,那么就需要为每一次函数调用指定不同的变量名)。
7、如果在打开或者读取文件时发生错误,那么函数就会返回字符串"**ERR**"。

// ************************* 【__StringFromFile】 参数说明 ************************* //
● Enter path (absolute or relative) to file
第 1 个参数:文件名/输入文件的全路径——被访问的文件路径(绝对或相对)

● Name of variable in which to store the result (optional) 
第 2 个参数:变量名/存储结果的变量的名称(可选)
// 把读取的内容放入变量,这种适用于有多处需要引用文件中的数据的场景,先在这里把读取的数据放入参数,后面再引用。

● Start file sequence number (opt)
第 3 个参数:初始序列号/开始文件序列号(opt)

● Final file sequence number (opt)
第 4 个参数:终止序列号/结束文件序列号(opt)

// 例如:在绝对路径有如下文件名 D:\testvaluel D:\testvalue2 D:\testvalue3 需要读取,
// 可以设置 Start file sequence number  (opt) 为 1,Final file sequence number (opt) 为 3 ,
// 这样就可以顺序读取这 3 个文件中的内容。


// ************************* 【__regexFunction】 参数补充 ************************* //
1、当打开或者重新打开文件时,文件名参数将会被解析。
2、每次执行函数时,引用名参数(如果支持)将会被解析。
3、使用序列号:
● 当使用可选的序列号时,文件名需要使用格式字符串java.text.DecimalFormat。
● 当前的序列号会作为唯一的参数。
● 如果不指明可选的初始序列号,就使用文件名作为起始值。
● 一些有用的格式序列如下:
#:插入数字,不从零开始,不包含空格。
000:插入数字,包含3个数字组合,不从零开始。
// 例如:
// 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  
4、如果不希望某个格式字符被翻译,测试人员需要为它加上单引号。
注意:"." 是格式字符,必须被单引号所包含。
6、如果省略了初始序列号,而终止序列号参数将会作为循环计数器,文件将会被使用指定的次数。
// 例如:
// ${_StringFromFile(PIN#'.'DAT,,1,2)}:读取 PIN1.DAT, PIN2.DAT。
// ${_StringFromFile(PIN.DAT,,,2)}:读取 PIN.DAT 两次。
函数参数 描述 是否必需
第1个参数

1、文件名(可以使用相对于JMeter启动目录的相对路径)。

2、如果要在文件名中使用可选的序列号,那么文件名必须适合转成十进制格式。

第2个参数

1、一个引用名(refName)的目的是复用这一函数创建的值。

2、可以使用语法${refName}来引用函数创建的值。

3、默认值为“StringFromFile_”

第3个参数 初始序列号(如果省略这一参数,终止序列号会作为一个循环计数器)
第4个参数 终止序列号(如果省略这一参数,序列号会一直增加下去,不会受到限制)

☆ __strLen


☆ __strReplace


☆ __substring


☆ __TestPlanName

__TestPlanName:
该函数返回测试计划的名称,即当前脚本的文件名。

☆ __threadGroupName


☆ __threadNum

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

☆ __time

__time:
1、函数 __time 可以通过多种格式返回当前时间,可以指定返回格式,由 SimpleDateFormat 类来处理函数格式。
● 年:yyyy
● 月: MM
● 日: dd 
● 时:hh 
● 分: mm 
● 秒: ss
// yyyy-MM-dd HH:mm:ss 返回格式如:2019-04-22 17:30:27 
2、如果省略了格式字符串,那么函数会以毫秒的形式返回当前时间。
3、其他情况下,当前时间会被转成简单日期格式。
4、包含如下形式:
● YMD = yyyyMMdd
● HMS = HHmmss
● YMDHMS = yyyyMMdd-HHmmss
● USER1 = JMeter 属性 time.USER1
● USER2 = JMeter 属性 time.USER2
5、用户可以通过修改 JMeter 属性来改变默认格式,例如:time.YMD = yyMMdd 。

// ************************* 【__time】 参数说明 ************************* //
● Format string for SimpleDateFormat (optional)
第 1 个参数:SimpleDateFormat 的格式字符串(可选)

● 存储结果的变量名(可选)
第 2 个参数:存储结果的变量名(可选)

__time 函数实战,点击前往查看另一博文:【Jmeter】Jmeter 函数助手实战:__time 时间戳函数

函数参数 描述 是否必需
第 1 个参数 格式:设置时间所采用的格式
第 2 个参数 变量名:待设置变量名

☆ __timeShift


☆ __tstFeedback


☆ __unescape

__unescape:
返转 escape 字符,如 \r\n 转成 CRLF 。

☆ __unescapeHtml

__unescapeHtml:
1、该函数反转 URL 链接中的 Unicode 编码字符,如 &nbsp;&nbsp; 转成空格。
2、函数 __unescapeHtml 用于反转义一个包含 HTML 实体的字符串,将其变为包含实际 Unicode 字符的字符串。
3、支持 HTML 4.0 实体。
// 例如,字符串 "&lt;Fran&ccedil;ais&gt;" 变为 "<Fran?ais>" 。
4、如果函数不认识某个实体,就会将实体保留下来,并一字不差地插入结果字符串中。
// 例如,">&zzzz;x" 会变为 ">&zzzz;x" 。

// ************************* 【__unescapeHtml】 参数说明 ************************* //
● 变量的名称
第 1 个参数:变量的名称
函数参数 描述 是否必需
第 1 个参数 待反转义字符串

☆ __uppercase


☆ __urldecode

__urldecode:
该函数反转 URL 链接中的 Unicode 字符,如 Word十%22school%22 反转成 Word "school" 。

☆ __urlencode

__urlencode:
该函数把 URL 链接中的 escap 字符转成 Unicode 编码,如 Word "school" 转成 Word+%22school%22

☆ __UUID

__UUID:
在参数化时有时候我们希望能够生成一个唯一的字串,UUID 能帮我们实现,它能保证生成的字符串是唯一存在的。

☆ __V

__V:
1、该函数用来执行交量表达式,并返回结果。
2、可以被用于执行嵌套函数引用,如果我们需要嵌套的使用变量时,就可以用到它(目前 JMeter 不支持)。 
// 例如,如果存在变量A1、A2和N=1,则:
// ${A1}:能正常工作
// {A{N}}:无法正常工作(嵌套变量引用)
// {__V(A${N})}:可以正常工作。
// A{N} 变为 A1,函数 __V 返回变量值 A1

// ************************* 【__V】 参数说明 ************************* //
● Name of variable (may include variable and function references)
第 1 个参数:变量名称(可能包括变量和函数引用)

● Name of variable in which to store the result (optional)
第 2 个参数:存储结果的变量名(可选)
函数参数 描述 是否必需
第 1 个参数 变量名表达式:待执行变量名表达式

☆ __XPath

__XPath:
1、该函数可以从 XML 格式的文件中匹配内容,每次调用返回一个匹配值,到达尾部从头开始,匹配不到返回空。	
2、__XPath 使用 XPath 表达式来匹配 XML 文件中的内容。
3、下面简单列举一下 XPath 的语法供参考:
● "/" :表示选择根节点。 
● "//" :表示选择任意位置的某个节点。 
● "@" :表示选择某个属性。 
● "*" :表示匹配任何元素节点。 
● "@*" :表示匹配任何属性值。
● company :选取 company 元素的所有子节点。
● /company : 选取根节点 company ,/开头是绝对路径。
● company /name :选取所有属于 company 的子元素的 name 元素,相对路径写法。
● //name :选择所有 name 子元素,而不管它们在文档中的位置。
● company//address :选择所有属于 company 元素的 address 元素,而不管它们位于 company 之下的什么位置。
● //@type :选取所有名为 type 的属性。 
备注:本部分内容来自于 W3C School,需要更详细了解 XPath 表达式的读者可以参考:W3C School 
( http://www.w3schoo l.com.cn/xpath/xpath_syntax.asp )中的内容。

// ************************* 【__XPath】 参数说明 ************************* //
● XML file to get values from 
第 1 个参数:从中获取值的 XML 文件

● XPath expression to match against 
第 2 个参数:要匹配的 xpath 表达式
函数参数 描述 是否必需
第 1 个参数 XML 文件名:一个待解析的 XML 文件名
第 2 个参数 XPath:一个 XPath 表达式,用于在 XML 文件中寻找目标节点

猜你喜欢

转载自blog.csdn.net/qq_39720249/article/details/88790042