JMeter使用记录整理(七)函数助手

使用函数助手,测试人员可以从下拉列表中选择一个函数,并为其参数设定值。在JMeter的选项菜单中找到函数助手对话框(快捷键:Ctrl+Shift+F1),打开函数助手,可以从下拉列表中选择一个函数,并为其参数设定值,不同函数要求的参数也不同。

JMeter 中的函数主要分为如下几类:

数据输入函数

__CSVRead

函数__CSVRead会从CSV文件读取一个字符串,在大多数情况下,新配置元件CSV Data Set更好用一些。当对某个文件进行第一次读取时,文件将被打开并读取到一个内部数组中。如果在读取过程中找到了空行,函数就认为到达文件末尾了,即允许拖尾注释(这一特性是JMeter 1.9.1版本引入的)。

所有对同一文件名的后续引用都使用相同的内部数组,文件名区分大小写。

每个线程都有自己的指向文件数组中当前行的内部指针。当线程首先引用文件时,它将在数组中分配下一个空闲行,因此每个线程将访问与所有其他线程不同的行(除非数组中的线程多于行)。

参数

描述

是否必填

文件名

要读取的文件名

列号

文件中的列号。0–第一列,1–第二列,next–文件的下一行。

示例:

读取文件中的第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=。

__XPath

该函数读取 XML 文件,并在文件中寻找与指定 XPath 相匹配的地方。

每调用函数一次,就会返回下一个匹配项。到达文件末尾后,会从头开始。如果没有匹配的节点,那么函数会返回空字符串,另外,还会向JMeter日志文件写一条警告信息。

整个节点列表都会被保存在内存之中,所以文件较大时不适合使用。

__StringFromFile

函数__StringFromFile可以被用来从文本文件中读取字符串。这对于需要大量可变数据的测试很有用。使用配置元件CSV Data Set Config ,也能达到相同的目的,而且方法更简单,但是它目前不支持多个输入文件。

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

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

__FileToString

把文件读取成一个字符串,每次调用都是读取整个文件。

如果出现打开或读取文件的错误,则函数将返回字符串 **ERR**。

数据计算函数

__counter

每次调用该计数器函数都会产生一个新值,从1开始每次加1。

计数器既可以被配置成针对每个虚拟用户是独立的,也可以被配置成所有虚拟用户公用的。

如果每个虚拟用户的计数器是独立增长的,那么通常被用于记录测试计划运行了多少遍。全局计数器通常被用于记录发送了多少次请求。

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

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

该函数也有对应的配置元件:计数器,功能类似。

__intSum

函数 __intSum 可以被用来计算两个或者更多整数值的和。至少需要两个整数,如果指定变量名则名称中必须包含一个非数字字母,否则它会被当成另一个整数值,而被函数用于计算。

__longSum

该函数用来计算两个或更多长整型值的和,使用方法跟上面的 __intSum 函数类似。

__Random

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

 示例:

返回 0--10 之间的随机整数

${__Random(0,10)}

__RandomDate

返回位于给定开始日期和结束日期值之间的随机日期。

__RandomString

根据给定的字符,生成指定长度的随机字符串。

 Random string length:生成的随机字符的长度。

Chars to use for random string generation:用来生成随机字符串的字符,可以是纯数字,纯字符,字符字母数字组合。

Name of variable in which to store the result (optional):保存结果的变量。

__UUID

通用唯一标识符函数,生成一个32位不重复的随机字符串。

示例:

${__UUID()}

字符串操作函数

__split

根据分隔符拆分字符串为多个变量。

当两个分隔符中间没有字符时,返回 ?。

被拆分出来的字符串,保存在变量中,类似这样:${VAR_1}, ${VAR_2} ...,总个数是 ${VAR_n}。

如果最后一个字符是分隔符,也会返回 ?。

__changeCase

根据指定的模式,修改字符串大小写;

可选模式有:UPPER、LOWER、CAPITALIZE。

示例:

UPPER--转换成大写字母:

${__changeCase(Avaro omnia desunt\, inopi pauca\, sapienti nihil,UPPER,)}

返回 AVARO OMNIA DESUNT, INOPI PAUCA, SAPIENTI NIHIL

LOWER--转换成小写字母:

${__changeCase(LABOR OMNIA VINCIT IMPROBUS,LOWER,)}

返回 labor omnia vincit improbus

CAPITALIZE--单词首字母大写:

${__changeCase(omnibus viis romam pervenitur,CAPITALIZE,)}

返回 Omnibus viis romam pervenitur

__regexFunction

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

脚本函数

__BeanShell

它有两个参数,第一个参数是要执行的语句,可以是beanshell语句或者是文件地址,是必选参数;

第二个参数是保存结果的变量名称,非必选参数。

该函数与 beanshell 元件作用是一样的,只是 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;)}  根据不同系统返回端口号

__javaScript

用来执行 JavaScript 脚本片段,并返回结果值。

该函数会调用标准的 JavaScript 解释器,还可以直接调用 jmeter 的内置函数。

注意:文本字符串要添加必要的引号。如果表达式中有逗号,要确保对其转义。

例如:${__javaScript('${sp}'.slice(7\,99999))},对 7 之后的逗号进行了转义。

获取信息函数

__TestPlanName

用法:${__TestPlanName},返回当前测试计划的名称;

如:测试计划名称是 Demo.jmx, 即返回 Demo.jmx。

__threadGroupName

用法:${__threadGroupName},返回当前线程组的名称,从 4.1 版本开始启用。

该函数不能用在任何配置元件中(如用户定义的变量),因为配置元件是由另外的独立线程运行的,它也不能在测试计划(Test Plan)中使用。

__threadNum

用法:${__threadNum},返回当前正在执行的线程的编号,而且不依赖于线程组,不能用在配置元件和测试计划中。

__samplerName

用法:${__samplerName()},返回当前请求的名称。

__log

函数__log会记录一条日志,并返回函数的输入字符串。可以设置不同的日志级别,如 OUT 和 ERR 将会分别输出记录到 System.out 和 System.err 中。在这种情况下,输出总是会被打印(它不依赖于当前的日志设置)。

__time

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

jmeter 中默认定义的时间格式属性值有:

YMD = yyyyMMdd。

HMS = HHmmss。

YMDHMS = yyyyMMdd-HHmmss。

USER1 = JMeter属性time.USER1。

USER2 = JMeter属性time.USER2。

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

属性信息函数

__isPropDefined

用于判断属性是否存在。

示例:

${__isPropDefined(START.HMS)}

判断属性 START.HMS 是否存在,返回 true。

__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,不保存结果值。

__P

这是一个简化的属性函数,用于与命令行上定义的属性一起使用。

与 _property 函数不同,没有选项可以将值保存在变量中,如果不提供默认值,则假定为1。

示例:

在脚本中定义如下两个函数:

${__P(group1.threads, 10)}

${__P(group1.loops)}

在命令行中调用:

jmeter -Jgroup1.threads=50  -Jgroup1.loops=100   执行时,两个参数分别是 50、100。

若命令行中不设置属性,执行时,两个参数分别是 10、1。

__setProperty

该函数用于设置 JMeter 属性的值。

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值