jmeter函数助手

news2025/1/13 15:32:34

详解JMeter函数和变量

测试人员可以在JMeter的选项菜单中找到函数助手对话框("Function Helper"对话框),如图11-1所示。

图11-1  函数助手(Function Helper)对话框

使用函数助手,测试人员可以从下拉列表中选择一个函数,并为其参数设定值。在图11-1中,表格的左边一列是函数参数的简要描述,右边一列是供用户填充参数的值。不同函数要求的参数也不同。

当测试人员完成以上设置后,请单击"Generate"按钮,函数助手会为测试人员生成函数调用所需的字符串,测试人员所要做的只是将它复制-粘贴到测试计划中去。

5.常用JMeter函数

1)__regexFunction

正则表达式函数可以使用正则表达式(用户提供的)来解析前面的服务器响应(或者是某个变量值)。函数会返回一个有模板的字符串,其中携带有可变的值。

__regexFunction还可以被用来保存值,以便供后续使用。在函数的第6个参数中,测试人员可以指定一个引用名。在函数执行以后,测试人员可以使用用户定义值的语法来获取同样的值。例如,如果测试人员输入"refName"作为第6个参数,那么测试人员可以使用:

${refName}来引用第2个参数(Template for the replacement string)的计算结果,这依赖于函数的解析结果。

${refName_g0}来引用函数解析后发现的所有匹配结果。

${refName_g1}来引用函数解析后发现的第一个匹配组合。

${refName_g#}来引用函数解析后发现的第n个匹配组合。

${refName_matchNr}来引用函数总共发现的匹配组合数目。

参数如表11-2所示。

表11-2  参数描述

函数参数

描述

是否必需

第1个参数

第1个参数是用于解析服务器响应数据的正则表达式。

它会找到所有匹配项。如果测试人员希望将表达式

中的某部分应用在模板字符串中,一定记得为其加

上圆括号。例如,<a href="(.*)">。这样就会将链接

的值存放到第一个匹配组合中(这里只有一个匹配组

合)。又如,<input type="hidden" name="(.*)"

value="(.*)">。在这个例子中,链接的name作为第

一个匹配组合,链接的value会作为第二个匹配组合。

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

第2个参数

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

内容。要在字符串中引用正则表达式捕获的匹配组合,

请使用语法:$[group_number]$。例如$1$或者 $2$。

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

第3个参数

第3个参数告诉JMeter使用第几次匹配。测试人

员的正则表达式可能会找到多个匹配项。对此,

测试人员有4种选择:

n          整数,直接告诉JMeter使用第几个匹配项。

n          “1”对应第一个匹配,“2”对应第二个匹配,以此类推

n          RAND,告诉JMeter随机选择一个匹配项

n          ALL,告诉JMeter使用所有匹配项,为每一

n          个匹配项创建一个模板字符串,并将它们连接在一起

n          浮点值0到1之间,根据公式(找到的总匹配

n          数目*指定浮点值)计算使用第几个匹配项,

n          计算值向最近的整数取整

否,默认值为1

第4个参数

如果在上一个参数中选择了“ALL”,那么这第4个

参数会被插入到重复的模板值之间

第5个参数

如果没有找到匹配项返回的默认值

第6个参数

重用函数解析值的引用名,参见上面内容

第7个参数

输入变量名称。如果指定了这一参数,那么该变量

的值就会作为函数的输入,而不再使用前面的

采样结果作为搜索对象

 

2)__counter

每次调用计数器函数都会产生一个新值,从1开始每次加1。计数器既可以被配置成针对每个虚拟用户是独立的,也可以被配置成所有虚拟用户公用的。如果每个虚拟用户的计数器是独立增长的,那么通常被用于记录测试计划运行了多少遍。全局计数器通常被用于记录发送了多少次请求。

计数器使用一个整数值来记录,允许的最大值为2,147,483,647。

目前计数器函数实例是独立实现的(JMeter 2.1.1及其以前版本,使用一个固定的线程变量来跟踪每个用户的计数器,因此多个计数器函数会操作同一个值)。全局计数器(FALSE)每个计数器实例都是独立维护的。

参数如表11-3所示。

表11-3  参数描述

函数参数

描述

是否必需

第1个参数

True,如果测试人员希望每个虚拟用户的计数

器保持独立,与其他用户的计数器相区别。

false,全局计数器

第2个参数

重用计数器函数创建值的引用名。测试人员可

以这样引用计数器的值:${refName}。这样一来,

测试人员就可以创建一个计数器后,在多个地方引

用它的值(JMeter 2.1.1及其以前版本,这个参数是必需的)

3)__threadNum

函数__threadNum只是简单地返回当前线程的编号。线程编号不依赖于线程组,这就意味着从函数的角度看来,某个线程组的线程#1和另一个线程组的线程#1是没有区别的。另外,该函数没有参数。

这一函数不能用在任何配置元件中(如用户定义的变量),原因在于配置元件是由一个独立线程运行的。另外在测试计划(Test Plan)中使用也是没有意义的。

4)__intSum

函数__intSum可以被用来计算两个或者更多整数值的合。

参数如表11-4所示。

表11-4  参数描述

函数参数

描述

是否必需

第1个参数

第1个整数值

第2个参数

第2个整数值

n个参数

n个整数值

最后一个参数

重用函数计算值的引用名。如果用户指定

了这一参数,那么引用名中必须包含一个非

数字字母,否则它会被当成另一个整数值,

而被函数用于计算

JMeter 2.3.1及其以前版本,要求必须有引用名参数。后续JMeter版本中,引用名是可选的参数,但是引用名不能是整数值。

5)__longSum

函数__ longSum可以被用来计算两个或者更多长整型值的合。

参数如表11-5所示。

表11-5  参数描述

函数参数

描述

是否必需

第1个参数

第1个长整型值

第2个参数

第2个长整型值

n个参数

n个长整型值

最后一个参数

重用函数计算值的引用名。如果用户指

定了这一参数,那么引用名中必须包含一个

非数字字母,否则它会被当成另一个长整

型值,而被函数用于计算

6)__StringFromFile

函数__StringFromFile可以被用来从文本文件中读取字符串。这对于需要大量可变数据的测试很有用。例如,当测试一个银行应用系统时,测试人员可能需要100条甚至1000条账户信息。

使用配置元件CSV Data Set Config ,也能达到相同的目的,而且方法更简单。但是该配置元件目前不支持多输入文件。

每次调用函数,都会从文件中读取下一行。当到达文件末尾时,函数又会从文件开始处重新读取,直到最大循环次数。如果在一个测试脚本中对该函数有多次引用,那么每一次引用都会独立打开文件,即使文件名是相同的(如果函数读取的值,在脚本其他地方也有使用,那么就需要为每一次函数调用指定不同的变量名)。

如果在打开或者读取文件时发生错误,那么函数就会返回字符串"**ERR**"。

参数如表11-6所示。

表11-6  参数描述

函数参数

描述

是否必需

文件名

文件名(可以使用相对于JMeter启动

目录的相对路径)。如果要在文件名中

使用可选的序列号,那么文件名必须适

合转成十进制格式。参考下面的例子

变量名

一个引用名(refName)的目的是复

用这一函数创建的值。可以使用语法

${refName}来引用函数创建的值。

默认值为“StringFromFile_”

初始序列号

初始序列号(如果省略这一参数,

终止序列号会作为一个循环计数器)

终止序列号

终止序列号(如果省略这一参数,

序列号会一直增加下去,不会受到限制)

当打开或者重新打开文件时,文件名参数将会被解析。

每次执行函数时,引用名参数(如果支持)将会被解析。

使用序列号:当使用可选的序列号时,文件名需要使用格式字符串Java.text.DecimalFormat。当前的序列号会作为唯一的参数。如果不指明可选的初始序列号,就使用文件名作为起始值。一些有用的格式序列如下:

#:插入数字,不从零开始,不包含空格。

000:插入数字,包含3个数字组合,不从零开始。

例如:

  1. pin#'.'dat -> pin1.dat, ... pin9.dat, pin10.dat, ... pin9999.dat   
  2. pin000'.'dat -> pin001.dat ... pin099.dat ... pin999.dat ... pin9999.dat   
  3. pin'.'dat# -> pin.dat1, ... pin.dat9 ... pin.dat999  

如果不希望某个格式字符被翻译,测试人员需要为它加上单引号。注意"."是格式字符,必须被单引号所包含。

如果省略了初始序列号,而终止序列号参数将会作为循环计数器,文件将会被使用指定的次数。例如:

${_StringFromFile(PIN#'.'DAT,,1,2)}:读取 PIN1.DAT, PIN2.DAT。

${_StringFromFile(PIN.DAT,,,2)}:读取 PIN.DAT 两次。

7)__machineName

函数__machineName返回本机的主机名。

参数如表11-7所示。

表11-7  参数描述

函数参数

描述

是否必需

变量名

重用函数计算值的引用名

8)__javaScript

函数__javaScript可以用来执行JavaScript代码片段(非Java),并返回结果值。JMeter的_javaScript函数会调用标准的JavaScript解释器。JavaScript会作为脚本语言使用,因此测试人员可以做相应的计算。

在脚本中可以访问如下一些变量。

Log:该函数的日志记录器。

Ctx:JmeterContext对象。

Vars:JmeterVariables对象。

threadName:字符串包含当前线程名称 (在2.3.2 版本中它被误写为"theadName")。

sampler:当前采样器对象(如果存在)。

sampleResult:前面的采样结果对象(如果存在)。

props:JMeter属性对象。

Rhinoscript允许通过它的包对象来访问静态方法。例如,用户可以使用如下方法访问JMeterContextService静态方法:

Packages.org.apache.jmeter.threads.JMeterContextService.getTotalThreads()

JMeter不是一款浏览器,它不会执行从页面下载的JavaScript。

参数如表11-8所示。

表11-8  参数描述

函数参数

描述

是否必需

JavaScript代码片段

待执行的JavaScript代码片段。例如:

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

n          Math.floor(Math.random()*(${maxRandom}

n          +1)):在0 和变量maxRandom之间的随机数

n          ${minRandom}+Math.floor(Math.random()*

n          (${maxRandom}-${minRandom}+1))

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

n          "${VAR}"=="abcd"

变量名

重用函数计算值的引用名

请记得为文本字符串添加必要的引号。另外,如果表达式中有逗号,请确保对其转义。例如,${__javaScript('${sp}'.slice(7\,99999))},对7之后的逗号进行了转义。

9)__Random

函数__Random会返回指定最大值和最小值之间的随机数。

参数如表11-9所示。

表11-9  参数描述

函数参数

描述

是否必需

最小值

最小数值

最大值

最大数值

变量名

重用函数计算值的引用名

10)__CSVRead

函数__CSVRead会从CSV文件读取一个字符串(请注意与StringFromFile 的区别)。

JMeter 1.9.1以前的版本仅支持从单个文件中读取,JMeter 1.9.1及其以后版本支持从多个文件中读取。

在大多数情况下,新配置元件CSV Data Set更好用一些。

当对某个文件进行第一次读取时,文件将被打开并读取到一个内部数组中。如果在读取过程中找到了空行,函数就认为到达文件末尾了,即允许拖尾注释(这一特性是JMeter 1.9.1版本引入的)。

后续所有对同一个文件名的引用,都使用相同的内部数组。另外,文件名大小写对函数调用很重要,哪怕操作系统不区分大小写,CSVRead(abc.txt,0)和CSVRead(aBc.txt,0)会引用不同的内部数组。

使用*ALIAS特性可以多次打开同一个文件,另外还能缩减文件名称。

每一个线程都有独立的内部指针指向文件数组中的当前行。当某个线程第一次引用文件时,函数会为线程在数组中分配下一个空闲行。如此一来,任何一个线程访问的文件行,都与其他线程不同(除非线程数大于数组包含的行数)。

默认情况下,函数会在遇到的每一个逗号处断行。如果测试人员希望在输入的列中使用逗号,那么测试人员需要换一个分隔符(通过设置属性csvread.delimiter来实现),且该符号没有在CSV文件的任何列中出现。

参数如表11-10所示。

表11-10  参数描述

函数参数

描述

是否必需

文件名

设置从哪个文件读取(或者*ALIAS)

列数

从文件的哪一列读取。0 =第一列, 1 =

第二列,依此类推。“next”为走到文件的

下一行。*ALIAS为打开一个文件,并给它分配一个别名

例如,测试人员可以用如下参数来设置某些变量:

  1. COL1a ${__CSVRead(random.txt,0)}   
  2. COL2a ${__CSVRead(random.txt,1)}${__CSVRead(random.txt,next)}   
  3. COL1b ${__CSVRead(random.txt,0)}   
  4. COL2b ${__CSVRead(random.txt,1)}${__CSVRead(random.txt,next)}   

上面的例子会从一行中读取两列,接着从下一行中读取两列。如果所有变量都在同一个前置处理器中(用户参数上定义的),那么行都是顺序读取的。否则,不同线程可能会读取不同的行。

这一函数并不适合于读取很大的文件,因为整个文件都会被存储到内存之中。对于较大的文件,请使用配置元件CSV Data Set或者StringFromFile 。

11)__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"),但是并不保存函数的返回值。

参数如表11-11所示。

表11-11  参数描述

函数参数

描述

是否必需

属性名

获取属性值、所需的属性名

变量名

重用函数计算值的引用名

默认值

属性未定义时的默认值

12)_P

函数_P是一个简化版的属性函数,目的是使用在命令行中定义的属性。不同于函数_property,本函数没有提供选项用于设置保存属性值的变量。另外,如果没有设置默认值,默认值自动设为1。之所以选择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(除非这些属性在其他地方有定义)。

参数如表11-12所示。

表11-12  参数描述

函数参数

描述

是否必需

属性名

获取属性值、所需的属性名

默认值

属性未定义时的默认值。如果省略

此参数,默认值自动设为1

13)__log

函数__log会记录一条日志,并返回函数的输入字符串。

参数如表11-13所示。

表11-13  参数描述

函数参数

描述

是否必需

待记录字符串

一个字符串

日志级别

OUT、ERR、DEBUG、INFO(默认)、

WARN或者ERROR

可抛弃的文本

如果非空,会创建一个可抛弃

的文本传递给记录器

注释

如果存在,注释会在字符串中展示,

用于标识日志记录了什么

OUT 和ERR的日志级别,将会分别导致输出记录到System.out和System.err中。在这种情况下,输出总是会被打印(它不依赖于当前的日志设置)。

例如,

${__log(Message)}:写入日志文件,形如"...thread Name : Message"。

${__log(Message,OUT)}:写到控制台窗口。

${__log(${VAR},,,VAR=)}:写入日志文件,形如"...thread Name VAR=value"。

14)__logn

函数__logn会记录一条日志,并返回空字符串。

参数如表11-14所示。

表11-14  参数描述

函数参数

描述

是否必需

待记录字符串

一个字符串

日志级别

OUT,ERR,DEBUG, INFO

(默认),WARN 或者ERROR

可抛弃的文本

如果非空,会创建一个可抛弃的

文本传递给记录器

OUT 和ERR的日志级别,将会分别导致输出记录到System.out和System.err中。在这种情况下,输出总是会被打印(它不依赖于当前的日志设置)。

例如,${__logn(VAR1=${VAR1},OUT)}:将变量值写到控制台窗口中。

15)__BeanShell

函数__BeanShell会执行传递给它的脚本,并返回结果。

关于BeanShell的详细资料,请参考BeanShell的Web站点:BeanShell - Lightweight Scripting for Java 

需要注意,测试脚本中每一个独立出现的函数调用,都会使用不同的解释器,但是后续对函数调用的援引会使用相同的解释器。这就意味着变量会持续存在,并跨越函数调用。

单个函数实例可以从多个线程调用。另外,该函数的execute()方法是同步的。

如果定义了属性"beanshell.function.init",那么它会作为一个源文件传递给解释器。这样就可以定义一些通用方法和变量。在bin目录中有一个初始化文件的例子:BeanShellFunction.bshrc。

如下变量在脚本执行前就已经设置了。

log:函数BeanShell(*)的记录器。

ctx:目前的JMeter Context变量。

vars:目前的JMeter变量。

props:JMeter属性对象。

threadName:线程名(字符串)。

sampler:当前采样器(如果存在)。

sampleResult:当前采样器(如果存在)。

"*"意味着该变量在JMeter使用初始化文件之前就已经设置了。其他变量在不同调用之间可能会发生变化。

参数如表11-15所示。

表11-15  参数描述

函数参数

描述

是否必需

BeanShell脚本

一个BeanShell脚本(不是文件名)

变量名

重用函数计算值的引用名

例如,

${__BeanShell(123*456)}:回56088。

${__BeanShell(source("function.bsh"))}:行在function.bsh中的脚本。

请记得为文本字符串及代表文本字符串的JMeter变量添加必要的引号。

16)__plit

函数__split会通过分隔符来拆分传递给它的字符串,并返回原始的字符串。如果分隔符紧挨在一起,那么函数就会以变量值的形式返回"?"。拆分出来的字符串,以变量${VAR_1}、{VAR_2}…以此类推的形式加以返回。JMeter 2.1.2及其以后版本,拖尾的分隔符会被认为缺少一个变量,会返回"?"。另外,为了更好地配合ForEach控制器,现在__split会删除第一个不用的变量(由前一次分隔符所设置)。

例如,在测试计划中定义变量VAR="a||c|":

  1. ${__split(${VAR},VAR),|} 

该函数调用会返回VAR变量的值,例如"a||c|",并设定VAR_n=4(3 ,JMeter 2.1.1及其以前版本)、VAR_1=a、VAR_2=?、VAR_3=c、VAR_4=?(null,JMeter 2.1.1及其以前版本)、VAR_5=null(JMeter 2.1.2及其以后版本)变量的值。

参数如表11-16所示。

表11-16  参数描述

函数参数

描述

是否必需

待拆分字符串

一个待拆分字符串,例如“a|b|c”

变量名

重用函数计算值的引用名

分隔符

分隔符,例如“|”。如果省略了此参数,函数

会使用逗号做分隔符。需要注意的是,假如测

试人员要多此一举,明确指定使用逗号,

需要对逗号转义,如“\,”

17)__XPath

函数__XPath读取XML文件,并在文件中寻找与指定XPath相匹配的地方。每调用函数一次,就会返回下一个匹配项。到达文件末尾后,会从头开始。如果没有匹配的节点,那么函数会返回空字符串,另外,还会向JMeter日志文件写一条警告信息。

整个节点列表都会被保存在内存之中。

例如:

  1. ${__XPath(/path/to/build.xml, //target/@name)} 

这会找到build.xml文件中的所有目标节点,并返回下一个name属性的内容。

参数如表11-17所示。

表11-17  参数描述

函数参数

描述

是否必需

XML文件名

一个待解析的XML文件名

XPath

一个XPath表达式,用于在

XML文件中寻找目标节点

18)__setProperty

函数__setProperty用于设置JMeter属性的值。函数的默认返回值是空字符串,因此该函数可以被用在任何地方,只要对函数本身调用是正确的。

通过将函数可选的第3个参数设置为"true",函数就会返回属性的原始值。

属性对于JMeter是全局的,因此可以被用来在线程和线程组之间通信。

参数如表11-18所示。

表11-18  参数描述

函数参数

描述

是否必需

属性名

待设置属性名

属性值

属性的值

True/False

是否返回属性原始值

19)__time

函数__time可以通过多种格式返回当前时间。

参数如表11-19所示。

表11-19  参数描述

函数参数

描述

是否必需

格式

设置时间所采用的格式

变量名

待设置变量名

如果省略了格式字符串,那么函数会以毫秒的形式返回当前时间。其他情况下,当前时间会被转成简单日期格式。包含如下形式:

YMD = yyyyMMdd

HMS = HHmmss

YMDHMS = yyyyMMdd-HHmmss

USER1 = JMeter属性time.USER1。

USER2 = JMeter属性time.USER2。

用户可以通过修改JMeter属性来改变默认格式,例如,time.YMD=yyMMdd。

20)_jexl

函数_jexl可以用于执行通用JEXL表达式,并返回执行结果。感兴趣的读者可以从下面这两个网页链接获取更多关于JEXL的信息。

JEXL – Apache Commons JEXL Syntax

JEXL – Apache Commons JEXL Examples

参数如表11-20所示。

表11-20  参数描述

函数参数

描述

是否必需

表达式

待执行的表达式。例如,6*(5+2)

变量名

待设置变量名

如下变量可以通过脚本进行访问。

log:函数记录器。

ctx:JMeterContext对象。

vars:JMeterVariables对象。

props:JMeter属性对象。

threadName:字符串包含当前线程名称 (在2.3.2 版本中它被误写为"theadName")。

sampler:当前的采样器对象(如果存在)。

sampleResult:前面的采样结果对象(如果存在)。

OUT - System.out,例如 OUT.println("message")。

JEXL可以基于它们来创建类,或者调用方法,例如:

  1. Systemclass=log.class.forName("java.lang.System");  
  2. now=Systemclass.currentTimeMillis(); 

需要注意的是,Web站点上的JEXL文档错误地建议使用"div"做整数除法。事实上"div"和"/"都执行普通除法。

JMeter 2.3.2以后的版本允许在表达式中包含多个声明。JMeter 2.3.2及其以前的版本只处理第一个声明(如果存在多个声明,就会记录一条警告日志)。

21)__V

函数__V可以用于执行变量名表达式,并返回执行结果。它可以被用于执行嵌套函数引用(目前JMeter不支持)。

例如,如果存在变量A1、A2和N=1,则:

${A1}:能正常工作。

${A${N}}:无法正常工作(嵌套变量引用)。

${__V(A${N})}:可以正常工作。A${N}变为A1,函数 __V返回变量值A1。

参数如表11-21所示。

表11-21  参数描述

函数参数

描述

是否必需

变量名表达式

待执行变量名表达式

22)__evalVar

函数__evalVar可以用来执行保存在变量中的表达式,并返回执行结果。

如此一来,用户可以从文件中读取一行字符串,并处理字符串中引用的变量。例如,假设变量"query"中包含有"select ${column} from ${table}",而"column"和"table"中分别包含有"name"和"customers",那么${__evalVar(query)}将会执行"select name from customers"。

参数如表11-22所示。

表11-22  参数描述

函数参数

描述

是否必需

变量名

待执行变量名

23)__eval

函数__eval可以用来执行一个字符串表达式,并返回执行结果。

如此一来,用户就可以对字符串(存储在变量中)中的变量和函数引用做出修改。例如,给定变量name=Smith、column=age、table=birthdays、SQL=select ${column} from ${table} where name='${name}',那么通过${__eval(${SQL})},就能执行"select age from birthdays where name='Smith'"。这样一来,就可以与CSV数据集相互配合,例如,将SQL语句和值都定义在数据文件中。

参数如表11-23所示。

表11-23  参数描述

函数参数

描述

是否必需

变量名

待执行变量

24)__char

函数__char会将一串数字翻译成Unicode字符,另外还请参考下面__unescape()函数。

参数如表11-24所示。

表11-24  参数描述

函数参数

描述

是否必需

Unicode字符编码

(十进制数或者十六进制数)

待转换的Unicode字符编码,

可以是十进制数或者十六进制数

Unicode字符编码(十进制数或者十六进制数) 待转换的Unicode字符编码,可以是十进制数或者十六进制数是

例如:

  1. ${__char(0xC,0xA)} = CRLF   
  2. ${__char(165)} = ï¿½ (yen)  

函数__unescape用于反转义Java-escaped字符串,另外还请参考上面的__char函数。

参数如表11-25所示。

表11-25  参数描述

函数参数

描述

是否必需

待反转义字符串

待反转义字符串

例如:

  1. ${__unescape(\r\n)} = CRLF  
  2. ${__unescape(1\t2)} = 1[tab]2  

26)__unescapeHtml

函数__unescapeHtml用于反转义一个包含HTML实体的字符串,将其变为包含实际Unicode字符的字符串。支持HTML 4.0实体。

例如,字符串"&lt;Fran&ccedil;ais&gt;"变为"<Fran?ais>"。

如果函数不认识某个实体,就会将实体保留下来,并一字不差地插入结果字符串中。例如,">&zzzz;x"会变为">&zzzz;x"。

参数如表11-26所示。

表11-26  参数描述

函数参数

描述

是否必需

待反转义字符串

待反转义字符串

27)__escapeHtml

函数__escapeHtml用于转义字符串中的字符(使用HTML实体)。支持HTML 4.0实体。

例如,"bread" & "butter"变为&quot;bread&quot; &amp; &quot;butter&quot;。

参数如表11-27所示。

表11-27  参数描述

函数参数

描述

是否必需

待转义字符串

待转义字符串

28)__FileToString

函数__FileToString可以被用来读取整个文件。每次对该函数的调用,都会读取整个文件。

如果在打开或者读取文件时发生错误,那么函数就会返回字符串"**ERR**"。

参数如表11-28所示。

表11-28  参数描述

函数参数

描述

是否必需

文件名

包含路径的文件名

(路径可以是相对于JMeter

启动目录的相对路径)

文件编码方式(如果不采

用平台默认的编码方式)

读取文件需要用到的文件

编码方式。如果没有

指明就使用平台默认的编码方式

变量名

引用名(refName)用

于重用函数创建的值

6.预定义变量

大多数变量都是通过函数调用和测试元件(如用户定义变量)来设置的;在这种情况下用户拥有对变量名的完整控制权。但是有些变量是JMeter内置的。例如,

Cookiename:包含Cookie值。

JMeterThread.last_sample_ok:最近的采样是否可以(true/false)。

START 变量(参见后续内容)。

7.预定义变量属性

JMeter属性集是在JMeter启动时通过系统属性初始化的;其他补充JMeter属性来自于jmeter.properties、user.properties或者命令行。

JMeter还另外定义了一些内置属性。下面是具体列表。从方便的角度考虑,属性START的值会被复制到同名变量中去。

START.MS:以毫秒为单位的JMeter启动时间。

START.YMD:JMeter启动日期格式yyyyMMdd。

START.HMS:JMeter启动时间格式HHmmss。

TESTSTART.MS:以毫秒为单位的测试启动时间。

请注意:START变量/属性表征的是JMeter启动时间,而非测试的启动时间。它们主要用于文件名之中。

文章出处:《零成本实现性能测试-jmeter》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/665206.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】文件操作 ② ( 文件操作 | 读取文件 | read 函数 | readline 函数 | readlines 函数 )

文章目录 一、读取文件1、read 函数2、readline 函数3、readlines 函数 二、代码示例 - 读取文件1、代码示例 - read 函数读取文件 10 字节内容2、代码示例 - read 函数读取文件所有内容3、代码示例 - readline 函数读取文件一行内容4、代码示例 - readlines 函数读取文件所有内…

利用 AI 作图帮助理解知识

一、背景 人类对图形的接受和处理能力高于对文字和数字的处理能力。 如果我们学习某个知识的时候&#xff0c;能够找到配套的图&#xff0c;理解会好很多。 但&#xff0c;并不是所有的知识都有配图。 然而&#xff0c;人工智能的时代已经来临&#xff0c;为什么不尝试用 AI…

Flutter 项目创建、运行及结构分析

目录 开发工具 创建项目 1.New Flutter Project 1.1直接创建新项目 1.2 已有项目创建新项目 2.选择SDK&#xff0c;补充项目资料 3.Demo已生成 3.1 android 目录 3.2 ios目录 3.3 lib目录 3.4 test 目录(可先不管) 4.配置文件 4.1 pubspec.yaml文件 4.2 pubspec.lock 4…

chatgpt赋能python:Python报错重新执行技巧

Python报错重新执行技巧 如果你在使用Python编程时&#xff0c;经常遇到报错的情况&#xff0c;特别是在大量数据处理或者复杂算法实现时&#xff0c;报错更是常态。那么&#xff0c;你是否不知道该如何处理这些报错信息&#xff0c;或者对于重新执行代码有一些不确定的想法&a…

【Leetcode60天带刷】day15二叉树——102. 二叉树的层序遍历 ,226.翻转二叉树 ,101.对称二叉树 2

题目&#xff1a; 102. 二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],…

嵌入式系统课程设计——温度记录仪

课程设计目录 一、嵌入式系统基础实验 二、项目需求分析 三、实验方案设计 四、实验程序设计 五、成本核算情况 八、完成情况与问题分析 九、学习心得 一、嵌入式系统基础实验 1.1实验平台的使用 图1 建立新工程图片 图2 选择lpc1114芯片图片 图3 选择头文件图片 图4 编译…

基于51单片机数字频率计的设计与实现

目录 第一章 系统原理与总体设计 1.1系统组成 1.2系统原理 1.3测量原理 1.4频率测量与总体设计 第二章 硬件电路设计 2.1硬件电路框图 2.2数字频率计原理图 2.3硬件电路设计 第三章 软件程序设计 3.1程序流程图 3.2显示电路程序设计 3.3 定时器初始化程序设计 3.4…

MeetingService重构和ParticipantList性能优化实践

​ 一丶背景 1.1 现状 最初Rooms客户端只支持加入Rcv meeting这个meeting type&#xff0c;RcvMeetingStateService里写了一些加会的状态机转换和Audio, Video, Share相关的功能代码。后续有新的业务&#xff0c;需要增加支持Webinar, Sip等各种Meeting&#xff0c;MeetingS…

Linux Shell 实现一键部署ovirt4

ovirt 前言 oVirt是一个开源分布式虚拟化解决方案&#xff0c;旨在管理您的整个企业基础设施。oVirt使用可信的KVM管理程序&#xff0c;并基于其他几个社区项目构建&#xff0c;包括libvirt、Gluster、PatternFly和Ansible。 Ovirt仅支持系统Centos / Redhat ovirt download…

npm利用verdaccio工具发布到私有仓库的教程

文章目录 概要安装方式运行方式相关的配置淘宝源修改开发访问地址设置用户删除用户更换源设置发布当前包 概要 提示&#xff1a;用于将可复制和常用的方法打包发布 例如&#xff1a; 可以将我们的公共组件和工具类以及SDK等核心的代码发布到外网中&#xff0c;需要我们常见私…

小白到运维工程师自学之路 第三十五集 (MongoDB的基本使用)

一、概述 MongoDB是一个非关系型数据库管理系统&#xff0c;它使用文档模型存储数据。MongoDB中的文档类似于JSON对象&#xff0c;可以包含键值对和嵌套文档。MongoDB提供了强大的查询语言、聚合框架、索引和直接在数据存储中运行的计算。 MongoDB被广泛应用于许多领域&#x…

MySQL开启远程访问权限

默认情况下&#xff0c;MySQL只允许本地登录&#xff0c;即只能在安装MySQL环境所在的主机下访问。 但是在日常开发和使用中&#xff0c;我们经常需要访问远端服务器的数据库&#xff0c;此时就需要开启服务器端MySQL的远程连接权限。1、生成环境&#xff0c;连接MySQL 2、查看…

STM32单片机(六)TIM定时器 -> 第七节:TIM编码器接口

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

vue引入jszip下载多个图片并压缩下载

vue引入jszip下载多个图片并压缩下载 jszip官网地址 先进行jszip下载 npm install jszip然后废话不多说直接上代码 <template><div><button click"downloadImages">下载图片</button></div> </template><script> impo…

shell内置命令

目录 内置命令介绍内置命令列表alisa内置命令alias别名定义语法unalias 别名删除语法alias演示 echo内置命令echo命令介绍echo输出语法echo输出转义字符 read内置命令介绍语法options支持的参数示例1&#xff1a;多个变量赋值 exit内置命令介绍语法示例&#xff1a;Shell脚本文…

OPC AE server服务的实现

OPC AE server的实现 日前实现了OPC AE server&#xff0c;特此记录备查。 1、事件分三类&#xff0c;从下图可知每类都包含啥内容了&#xff0c;CONDITION看起来主要是一些越限&#xff0c;熟悉其它协议的朋友应该对这个不陌生&#xff0c;一般这种事件产生时&#xff0c;会…

通过Selenium实现Web自动化测试的研究

目录 前言&#xff1a; 1 自动化测试概念 1.2 自动化测试发展阶段 2 自动化测试工具Selenium简介 3 具体测试过程 4 总结 前言&#xff1a; Web自动化测试是Web应用程序测试的重要组成部分&#xff0c;它通过模拟实际用户行为&#xff0c;对Web应用程序进行自动化测试并…

chatgpt赋能python:Python拆包:提高编程效率的神器

Python拆包&#xff1a;提高编程效率的神器 在Python编程中&#xff0c;拆包&#xff08;unpacking&#xff09;是一项非常有用的技巧。它可以让你将一个可迭代对象&#xff08;iterable&#xff09;中的元素分离开来&#xff0c;赋值给多个变量。这个过程一般称为“解包”&am…

小白到运维工程师自学之路 第三十八集 (redis高可用集群)

一、概述 Redis高可用集群是一种分布式系统&#xff0c;它由多个Redis节点组成&#xff0c;可以提供高可用性和容错性。在Redis高可用集群中&#xff0c;每个节点都可以处理客户端请求&#xff0c;并且数据会在多个节点之间进行复制和同步&#xff0c;以确保数据的可靠性和一致…

Day_51-53kNN分类器

目录 Day_51&#xff1a;kNN分类器 一. 前言 二. 机器学习基本术语 三. kNN算法的原理 1. kNN算法的思想 2. kNN算法的具体实现过程 四. 代码实现 1. 导包 2. 参数初始化 3. 数据的导入 4. 数据的抽取 5. 对于测试集进行预测 6. 核心代码 Day_52&#xff1a;knn分类器&am…