jmeter函数和变量(三),jmeter函数变量
jmeter函数和变量(三),jmeter函数变量
接上篇 jmeter函数和变量 http://blog.csdn.net/yue530tomtom/article/details/77456506
__log
记录一个日志并返回输入的字符串
Attribute | Description | Required |
---|---|---|
日志字符串 | 一个字符串 | 是 |
日志级别 | OUT、ERR、DEBUG、INFO(默认)、WARN或者ERROR | 否 |
异常文本 | 如果非空,会创建一个异常;如果不设置,函数会抛出Java自定义的异常 | 否 |
注释 | 如果存在,注释会在字符串中展示,用于标识日志记录了什么 | 否 |
OUT 和ERR的日志级别,将会分别导致输出记录到System.out和System.err中。在这种情况下,输出总是会被打印(它不依赖于当前的日志设置)。
${__log(Message)}:写入日志文件,形如”… : Message”。
${__log(Message,OUT)}:写到控制台窗口。
${__log(${VAR},,,VAR=)}:写入日志文件,形如”… VAR=value”。
__logn
类似log但返回空字符串
例子见__log
Attribute | Description | Required |
---|---|---|
日志字符串 | 一个字符串 | 是 |
日志级别 | OUT、ERR、DEBUG、INFO(默认)、WARN或者ERROR | 否 |
异常文本 | 如果非空,会创建一个异常;如果不设置,函数会抛出Java自定义的异常 | 否 |
__BeanShell
该函数允许用户运行一段自定义的BeanShell函数,脚本可以用来设置JMeter的属性和参数值,也可以返回数据。若想获取更多关于beanshell详细信息—请移步
需要注意,测试脚本中每一个独立出现的函数调用,都会使用不同的解释器,但是后续对函数调用的援引会使用相同的解释器。这就意味着变量会持续存在,并跨越函数调用。
单个函数实例可以从多个线程调用。另外,该函数的execute()方法是同步的。
如果定义了属性 “beanshell.function.init”,那么它会作为一个源文件传递给解释器。这样就可以定义一些通用方法和变量。在bin目录中有一个初始化文件的例子:BeanShellFunction.bshrc。
如下变量在脚本执行前就已经设置了。
- log:函数BeanShell(*)的记录器。
- ctx:目前的JMeter Context变量。
- vars:目前的JMeter变量。
- props:JMeter属性对象。
- threadName:线程名(字符串)。
- sampler:当前采样器(如果存在)。
- sampleResult:当前采样器(如果存在)。
(*)意味着该变量在JMeter使用初始化文件之前就已经设置了。其他变量在不同调用之间可能会发生变化。
Attribute | Description | Required |
---|---|---|
beanshell脚本 | beanshell脚本片段 | 是 |
变量 | 引用名,保存函数返回值,以便复用 | 否 |
例如,
${__BeanShell(123*456)}:回56088。
${__BeanShell(source("function.bsh"))}:行在function.bsh中的脚本。
请记得为文本字符串及代表文本字符串的JMeter变量添加必要的引号。
__groovy
与beanshell类似,只是它执行的是apache groovy脚本,并返回结果。
如果定义了属性 “groovy.utilities”,属性将会被脚本引擎加载,这样就可以定义一些通用方法和变量。在bin目录中有一个初始化文件的例子:utility.groovy
如下变量在脚本执行前就已经设置了。
- log:函数BeanShell(*)的记录器。
- ctx:目前的JMeter Context变量。
- vars:目前的JMeter变量。
- props:JMeter属性对象。
- threadName:线程名(字符串)。
- sampler:当前采样器(如果存在)。
- prev:前一个SamplrResult(如果存在)。
- OUT:System.out
(*)意味着该变量在JMeter使用初始化文件之前就已经设置了。其他变量在不同调用之间可能会发生变化。
Attribute | Description | Required |
---|---|---|
表达式 | groovy脚本片段 | 是 |
变量 | 引用名,保存函数返回值,以便复用 | 否 |
例如
${__groovy(123*456)}
returns 56088
${__groovy("${var}".substring(0\,2))}
请记得为文本字符串及代表文本字符串的JMeter变量添加必要的引号。
__split
函数__split会通过分隔符来拆分传递给它的字符串,并返回原始的字符串。如果分隔符紧挨在一起,那么函数就会以变量值的形式返回”?”。拆分出来的字符串,以变量${VAR_1}、${VAR_2}…以此类推的形式加以返回,变量的总数使用${VAR_n}。拖尾(只有分隔符即分隔符后面没有值)的分隔符会被认为缺少一个变量,会返回”?”。另外,为了更好地配合ForEach控制器,现在__split会删除第一个不用的变量(由前一次分隔符所设置)。比如
例如,在测试计划中定义变量VAR=”a||c|”:
${__split(\${VAR},VAR),|}
Attribute | Description | Required |
---|---|---|
字符串 | 被操作的字符串 | 是 |
变量 | 引用名,保存函数返回值,以便复用 | 是 |
分隔符 | 默认是逗号分隔 | 否 |
__XPath
函数__XPath读取XML文件,并在文件中寻找与指定XPath相匹配的地方。每调用函数一次,就会返回下一个匹配项。到达文件末尾后,会从头开始。如果没有匹配的节点,那么函数会返回空字符串,另外,还会向JMeter日志文件写一条警告信息。
整个节点列表都会被保存在内存之中。
例如:
${__XPath(/path/to/build.xml, //target/@name)}
这会找到build.xml文件中的所有target节点,并返回下一个name属性的内容。
Attribute | Description | Required |
---|---|---|
xml文件 | 需要解析的xml文件 | 是 |
xpath | xpath表达式 | 是 |
从实验的结果来看,好像只能取属性值,对应nodes的值无法获取,返回都是null;另外标准的xpath语法也不支持比如last()://title[last()]/@lang返回的是第一个而不是最后一个~ 希望来个高手赐教、解惑
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>19.99</price>
</book>
<book>
<title lang="cn">Learning XML</title>
<price>29.95</price>
</book>
<book>
<title lang="us">Harry Potter</title>
<price>39.99</price>
</book>
<book>
<title lang="last">Learning XML</title>
<price>49.95</price>
</book>
</bookstore>
__setProperty
函数__setProperty用于设置JMeter属性的值。函数的默认返回值是空字符串,因此该函数可以被用在任何地方,只要对函数本身调用是正确的。
通过将函数可选的第3个参数设置为”true”,函数就会返回属性的原始值。
属性对于JMeter是全局的,因此可以被用来在线程和线程组之间通信。
Attribute | Description | Required |
---|---|---|
属性名 | 需要修改的目标属性 | 是 |
属性值 | 属性更新值 | 是 |
true/false | 原属性值是否返回 | 否 |
__time
使用指定的变量格式返回当前时间
Attribute | Description | Required |
---|---|---|
时间格式 | 将格式传递给SimpleDateFormat。该函数支持各种缩写别名。如果省略格式,函数返回从1970年到当前时间的毫秒数 | 否 |
变量 | 引用名,保存函数返回值,以便复用 | 否 |
如果省略了格式字符串,函数返回从1970年到当前时间的毫秒数。其他情况下,当前时间会被转成简单日期格式。如果格式匹配 “/ddd”(ddd是十进制数),返回 从1970年的总毫秒数除以/ddd,包含如下形式:
YMD = yyyyMMdd。
HMS = HHmmss。
YMDHMS = yyyyMMdd-HHmmss。
USER1 = JMeter属性time.USER1。
USER2 = JMeter属性time.USER2。
用户可以通过修改JMeter属性来改变默认格式,例如,time.YMD=yyMMdd。
__jexl2
函数_jexl可以用于执行通用JEXL表达式,并返回执行结果。感兴趣的读者可以从下面这两个网页链接获取更多关于JEXL的信息。
- JEXL syntax description
- JEXL examples
Attribute | Description | Required |
---|---|---|
表达式 | 要执行的表达式 | 是 |
变量 | 引用名,保存函数返回值,以便复用 | 否 |
如下变量可以通过脚本进行访问。
- log:函数记录器。
- ctx:JMeterContext对象。
- vars:JMeterVariables对象。
- props:JMeter属性对象。
- threadName:字符串包含当前线程名称 (在2.3.2 版本中它被误写为”theadName”)。
- sampler:当前的采样器对象(如果存在)。
- sampleResult:前面的采样结果对象(如果存在)。
- OUT - System.out,例如 OUT.println(“message”)。
JEXL可以基于它们来创建类,或者调用方法,例如:
Systemclass=log.class.forName("java.lang.System");
now=Systemclass.currentTimeMillis();
需要注意的是,Web站点上的JEXL文档错误地建议使用”div”做整数除法。事实上”div”和”/”都执行普通除法。
i= 5 / 2;
i.intValue(); // or use i.longValue()
JMeter 允许在表达式中包含复杂的语句。
__jexl3
详见 __jexl2
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
相关文章
- 暂无相关文章
用户点评