打开选项找到函数助手
常用JMeter函数
函数参数 |
描述 |
是否必需 |
第1个参数 |
第1个参数是用于解析服务器响应数据的正则表达式,它会找到所有匹配项;如果希望将表达式中的某部分应用在模板字符串中,一定记得为其加上圆括号。例如,<a href="(.)">,这样就会将链接的值存放到第一个匹配组合中(这里只有一个匹配组合)。又如,<input type="hidden"name="(.)"value="(.*)">,在这个例子中,链接的name作为第一个匹配组合,链接的value会作为第二个匹配组合,这些组合可以用在测试人员的模板字符串中 |
是 |
第2个参数 |
这是一个模板字符串,函数会动态填写字符串的部分内容。要在字符串中引用正则表达式捕获的匹配组合,请使用语法:$[group_number]$。例如$1$或者 $2$。测试人员的模板可以是任何字符串 |
是 |
第3个参数 |
第3个参数告诉JMeter使用第几次匹配;测试人员的正则表达式可能会找到多个匹配项,对此,有4种选择 :【1、】整数,直接告诉JMeter使用第几个匹配项。 “1”对应第一个匹配,“2”对应第二个匹配,以此类推【 2、】RAND,告诉JMeter随机选择一个匹配项 【 3、】ALL,告诉JMeter使用所有匹配项,为每一个匹配项创建一个模板字符串,并将它们连接在一起 【4、】浮点值0到1之间,根据公式(找到的总匹配数目*指定浮点值)计算使用第几个匹配项,计算值向最近的整数取整 |
否,默认值该是 1 |
第4个参数 |
如果在上一个参数中选择了“ALL”,那么这第4个参数会被插入到重复的模板值之间 |
否 |
第5个参数 |
如果没有找到匹配项返回的默认值 |
否 |
第6个参数 |
可以指定一个引用名;在函数执行以后,可以使用用户定义值的语法来获取同样的值。例如,如果输入"refName"作为第6个参数,那么可以使用:【1】${refName}来引用第2个参数(Template for the replacement string)的计算结果,这依赖于函数的解析结果;【2】${refName_g0}来引用函数解析后发现的所有匹配结果;【3】${refName_g1}来引用函数解析后发现的第一个匹配组合;【4】${refName_g#}来引用函数解析后发现的第n个匹配组合;【5】${refName_matchNr}来引用函数总共发现的匹配组合数目; |
否 |
第7个参数 |
输入变量名称。如果指定了这一参数,那么该变量的值就会作为函数的输入,而不再使用前面的采样结果作为搜索对象 |
否 |
其中:
CSV file to get values from |*alias:| 要读取的文件路径,为绝对路径|
CSV文件列号| next| alias:从第几列开始读取,注意第一列是0 ,第二列是1,依此类推。“next”为走到文件的下一行。alias为打开
一个文件,并给它分配一个别名
使用*ALIAS特性可以多次打开同一个文件,另外还能缩减文件名称
每一个线程都有独立的内部指针指向文件数组中的当前行;当某个线程第一次引用文件时,
函数会为线程在数组中分配下一个空闲行。如此一来,任何一个线程访问的文件行,
都与其他线程不同(除非线程数大于数组包含的行数)。
默认下,函数会在遇到每一个逗号处断行;如果希望在输入列中使用逗号,
那么需要换一个分隔符(设置属性csvread.delimiter实现),
且该符号没有在CSV文件任何列中出现。
函数参数 |
描述 |
是否必需 |
最小值 |
最小数值 |
是 |
最大值 |
最大数值 |
是 |
变量名 |
重用函数计算值的引用名 |
否 |
注意:当我们设置的线程数超过随机数范围时,随机数将会重复生成
函数参数 |
描述 |
是否必需 |
文件名 |
文件名(可以使用相对于JMeter启动目录的相对路径) |
是 |
变量名 |
一个引用名(refName)的目的是复用这一函数创建的值。可以使用语法${refName}来引用函数创建的值。默认值为“StringFromFile_” |
否 |
初始序列号 |
初始序列号(如果省略这一参数,终止序列号会作为一个循环计数器 |
否 |
终止序列号 |
终止序列号(如果省略这一参数,序列号会一直增加下去,不会受到限制) |
否 |
注意:当线程组大于(文件行数)时,将只会执行(文件行数)次——终止序列号,而不会循环读取执行所有的设定线程组数,没有指定读取次数,则默认会循环读取数据
函数参数 |
描述 |
是否必需 |
JavaScript代码片段 |
待执行的JavaScript代码片段,例如:【1】new Date():返回当前日期和时间【2】Math.floor(Math.random()(${maxRandom}+1)):在0和变量maxRandom之间的随机数【3】${minRandom}+Math.floor(Math.random()(${maxRandom}-${minRandom}+1)):在变量 minRandom和maxRandom之间的随机数"${VAR}"=="abcd" |
是 |
变量名 |
重用函数计算值的引用名 |
否 |
函数__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。
函数参数 |
描述 |
是否必需 |
BeanShell脚本 |
一个BeanShell脚本(不是文件名) |
是 |
变量名 |
重用函数计算值的引用名 |
否 |
该函数允许用户运行一段自定义的BeanShell函数,脚本可以用来设置JMeter的属性和参数值,
也可以返回数据。BeanShell是一种非常灵活的脚本方式。
需要注意,测试脚本中每一个独立出现的函数调用,都会使用不同的解释器,
但是后续对函数调用的援引会使用相同的解释器;这就意味着变量会持续存在,并跨越函数调用
单个函数实例可以从多个线程调用。另外,该函数的execute()方法是同步的。
如果定义了属性"beanshell.function.init",那么它会作为一个源文件传递给解释器。
这样就可以定义一些通用方法和变量。
在bin目录中有一个初始化文件的例子:BeanShellFunction.bshrc。
如下变量在脚本执行前就已经设置:
log:函数BeanShell(*)的记录器;
ctx:目前的JMeter Context变量;
vars:目前的JMeter变量;
props:JMeter属性对象;
threadName:线程名(字符串);
sampler:当前采样器(如果存在);
sampleResult:当前采样器(如果存在);
"*"意味着该变量在JMeter使用初始化文件之前就已经设置了。
其他变量在不同调用之间可能会发生变化;
函数参数 |
描述 |
是否必需 |
第1个参数 |
True,如果希望每个虚拟用户的计数器保持独立,与其他用户的计数器相区别;false,全局计数器; |
是 |
第2个参数 |
重用计数器函数创建值的引用名。可以这样引用计数器的值:${refName}。这样一来,就可以创建一个计数器后,在多个地方引用它的值 |
否 |
每次调用计数器函数都会产生一个新值,从1开始每次加1。
计数器既可以被配置成针对每个虚拟用户是独立的,也可以被配置成所有虚拟用户公用的。
如果每个虚拟用户的计数器是独立增长的,那么通常被用于记录测试计划运行了多少遍。
全局计数器通常被用于记录发送了多少次请求,
计数器使用一个整数值来记录,允许的最大值为2,147,483,647
全局计数器(FALSE)每个计数器实例都是独立维护的
函数参数 |
描述 |
是否必需 |
格式 |
设置时间所采用的格式 |
否 |
变量名 |
待设置变量名 |
否 |
函数__time可以通过多种格式返回当前时间
如果省略了格式字符串,那么函数会以毫秒的形式返回当前时间。
其他情况下,当前时间会被转成简单日期格式。包含如下形式:
YMD = yyyyMMdd;
HMS = HHmmss;
YMDHMS = yyyyMMdd-HHmmss;
USER1 = JMeter属性time.USER1;
USER2 = JMeter属性time.USER2;
用户可以通过修改JMeter属性来改变默认格式,例如:time.YMD=yyMMdd。
总结
我参考资料总结了常用的几个函数,仔细写明,方便自己以后参考
【参考资料】(http://www.cnblogs.com/imyalost/p/6802173.html)