jmeter函数和变量(三)

来源:互联网 发布:淘宝店铺如何上传图片 编辑:程序博客网 时间:2024/05/17 02:15

接上篇 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))}

groovytest

请记得为文本字符串及代表文本字符串的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返回的是第一个而不是最后一个~ 希望来个高手赐教、解惑

funXpath

<?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

原创粉丝点击