接上篇 jmeter函数和变量 http://blog.csdn.net/yue530tomtom/article/details/76651040
函数__javaScript可以用来执行JavaScript代码片段(非Java),并返回结果值。JMeter的__javaScript函数会调用标准的javascript解释器。JavaScript会作为脚本语言使用,因此可以做相应的计算。
在脚本中可以访问如下一些变量。
Rhinoscript允许通过它的包对象来访问静态方法。例如,用户可以使用如下方法访问JMeterContextService静态方法:
Packages.org.apache.jmeter.threads.JMeterContextService.getTotalThreads()
JMeter不是一款浏览器,它不会执行从页面下载的JavaScript。
Attribute | Description | Required |
---|---|---|
表达式 | 函数执行的JavaScript表达式例如:new Date() | 是 |
变量 | 引用名,保存函数返回值,以便复用 | 否 |
请记得为文本字符串添加必要的引号。另外,如果表达式中有逗号,请确保对其转义。例如,${__javaScript(‘${sp}’.slice(7,99999))},对7之后的逗号进行了转义。
${__javaScript(new Date())}:返回一个日期
${__javaScript(new Date(),MYDATE)}:返回当前日期并存储在变量MYDATE中
${__javaScript(Math.floor(Math.random()*(${maxRandom}+1)),MYRESULT)}:使用变量maxRandom,返回0-maxRandom之间的一个随机数并存储在MYRESULT中
${__javaScript(${minRandom}+Math.floor(Math.random()*(${maxRandom}-${minRandom}+1)),MYRESULT)}:使用maxRandom和minRandom变量,返回一个minRandom~maxRandom之间的一个随机数并存储在MYRESULT中
${__javaScript(“${VAR}”==”abcd”,MYRESULT)}:比较VAR变量值是否等于”abcd”的值,返回boolean值并存储在MYRESULT中
函数__Random会返回指定最大值和最小值之间的随机数
Attribute | Description | Required |
---|---|---|
最小值 | 数值 | 是 |
最大值 | 一个比第一个大的数值 | 是 |
变量 | 引用名,保存函数返回值,以便复用 | 否 |
返回一个固定长度的随机字符串,在缺省第二个参数时,即使指定了jmeter的字符编码也可能会出现乱码。
Attribute | Description | Required |
---|---|---|
Length | 将要创建的随机字符串的长度 | 是 |
使用字符 | 创建随机字符串使用的字符集 | 否 |
变量 | 引用名,保存函数值,壁边复用 | 否 |
函数返回基于指定的变量产生的随机值
变量可以是简单的变量也可以是表达式形式的复杂变量例如
多值变量是从表达式提取出来的,这样会创建一个匹配总数的变量”varName_matchNr” 并且会为每个变量创建varName_n,其中n=1,2,3……等
Attribute | Description | Required |
---|---|---|
变量列表 | 使用|分割的变量名列表 | 是 |
变量 | 引用名,保存函数值,壁边复用 | 否 |
用来生成一个附机字符串,格式类似8e9464d2-4561-453e-8005-ad0a44507640
函数__CSVRead会从CSV文件读取一个字符串(请注意与StringFromFile 的区别)。
JMeter3.2支持从多个文件中读取(其实从JMeter 1.9.1+就开始支持)。
当对某个文件进行第一次读取时,文件将被打开并读取到一个内部数组中。如果在读取过程中找到了空行,函数就认为到达文件末尾。
后续所有对同一个文件名的引用,都使用相同的内部数组。另外,文件名大小写对函数调用很重要,哪怕操作系统不区分大小写,CSVRead(abc.txt,0)和CSVRead(aBc.txt,0)会引用不同的内部数组。
使用*ALIAS特性可以多次打开同一个文件,另外还能缩减文件名称。
每一个线程都有独立的内部指针指向文件数组中的当前行。当某个线程第一次引用文件时,函数会为线程在数组中分配下一个空闲行。如此一来,任何一个线程访问的文件行,都与其他线程不同[除非线程数大于数组包含的行数]。
默认情况下,使用都好分割每一行的数据。如果希望在输入的列中使用逗号,那么需要换一个分隔符(通过设置属性csvread.delimiter来实现),且该符号没有在CSV文件的任何列中出现。
Attribute | Description | Required |
---|---|---|
文件名 | 需要读入的文件名(或者别名) | 是 |
列序号 | 文件中第几个域(就是指定字符分割后第几块,从0编号开始)。0表示第一个域,1表示第二个域……。next表示跳过当前行,到文件下一行。*ALIAS为打开的文件分配一个别名 | 是 |
上面的例子会从一行中读取两列,接着从下一行中读取两列。如果所有变量都在同一个前置处理器中(用户参数上定义的),那么行都是顺序读取的。否则,不同线程可能会读取不同的行。
这一函数并不适合于读取很大的文件,因为整个文件都会被存储到内存之中。对于较大的文件,请使用配置元件CSV Data Set或者StringFromFile 。
函数__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”),但是并不保存函数的返回值。
Attribute | Description | Required |
---|---|---|
属性名 | 获取属性值、所需的属性名 | 是 |
变量名 | 重用函数计算值的引用名 | 否 |
默认值 | 属性未定义时的默认值 | 否 |
什么?不知道jmeter属性名如何查看?
WorkBench右键—>Add—>Non Test Elements—>Property Display
类似__property,处理命令行中属性,和__property不同,__P不会保存属性值,如果没有指定默认值就假定为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(除非这些属性在其他地方有定义)
Attribute | Description | Required |
---|---|---|
属性名 | 获取属性值、所需的属性名 | 是 |
默认值 | 属性未定义时的默认值,未指定就假定是1 | 否 |
Jmeter函数和变量(一) http://blog.csdn.net/yue530tomtom/article/details/76651040
Jmeter函数和变量(二) http://blog.csdn.net/yue530tomtom/article/details/77456506
Jmeter函数和变量(三) http://blog.csdn.net/yue530tomtom/article/details/77533426
Jmeter函数和变量(四) http://blog.csdn.net/yue530tomtom/article/details/77573247