| 接上篇 jmeter函數(shù)和變量 http://blog.csdn.net/yue530tomtom/article/details/77456506 __log記錄一個日志并返回輸入的字符串 | Attribute | Description | Required | 
|---|
 | 日志字符串 | 一個字符串 | 是 |  | 日志級別 | OUT、ERR、DEBUG、INFO(默認)、WARN或者ERROR | 否 |  | 異常文本 | 如果非空,會創(chuàng)建一個異常;如果不設(shè)置,函數(shù)會拋出Java自定義的異常 | 否 |  | 注釋 | 如果存在,注釋會在字符串中展示,用于標識日志記錄了什么 | 否 | 
OUT 和ERR的日志級別,將會分別導致輸出記錄到System.out和System.err中。在這種情況下,輸出總是會被打?。ㄋ灰蕾囉诋斍暗娜罩驹O(shè)置)。 ${__log(Message)}:寫入日志文件,形如”… : Message”。
 ${__log(Message,OUT)}:寫到控制臺窗口。
 ${__log(${VAR},,,VAR=)}:寫入日志文件,形如”… VAR=value”。
 
 __logn類似log但返回空字符串 例子見__log
 | Attribute | Description | Required | 
|---|
 | 日志字符串 | 一個字符串 | 是 |  | 日志級別 | OUT、ERR、DEBUG、INFO(默認)、WARN或者ERROR | 否 |  | 異常文本 | 如果非空,會創(chuàng)建一個異常;如果不設(shè)置,函數(shù)會拋出Java自定義的異常 | 否 | 
__BeanShell該函數(shù)允許用戶運行一段自定義的BeanShell函數(shù),腳本可以用來設(shè)置JMeter的屬性和參數(shù)值,也可以返回數(shù)據(jù)。若想獲取更多關(guān)于beanshell詳細信息—請移步 需要注意,測試腳本中每一個獨立出現(xiàn)的函數(shù)調(diào)用,都會使用不同的解釋器,但是后續(xù)對函數(shù)調(diào)用的援引會使用相同的解釋器。這就意味著變量會持續(xù)存在,并跨越函數(shù)調(diào)用。
 單個函數(shù)實例可以從多個線程調(diào)用。另外,該函數(shù)的execute()方法是同步的。 如果定義了屬性 “beanshell.function.init”,那么它會作為一個源文件傳遞給解釋器。這樣就可以定義一些通用方法和變量。在bin目錄中有一個初始化文件的例子:BeanShellFunction.bshrc。
 如下變量在腳本執(zhí)行前就已經(jīng)設(shè)置了。 (*)意味著該變量在JMeter使用初始化文件之前就已經(jīng)設(shè)置了。其他變量在不同調(diào)用之間可能會發(fā)生變化。 | Attribute | Description | Required | 
|---|
 | beanshell腳本 | beanshell腳本片段 | 是 |  | 變量 | 引用名,保存函數(shù)返回值,以便復用 | 否 | 
例如, ${__BeanShell(123*456)}:回56088。
${__BeanShell(source("function.bsh"))}:行在function.bsh中的腳本。
 
 請記得為文本字符串及代表文本字符串的JMeter變量添加必要的引號。
 __groovy與beanshell類似,只是它執(zhí)行的是apache groovy腳本,并返回結(jié)果。 如果定義了屬性 “groovy.utilities”,屬性將會被腳本引擎加載,這樣就可以定義一些通用方法和變量。在bin目錄中有一個初始化文件的例子:utility.groovy
 如下變量在腳本執(zhí)行前就已經(jīng)設(shè)置了。
 (*)意味著該變量在JMeter使用初始化文件之前就已經(jīng)設(shè)置了。其他變量在不同調(diào)用之間可能會發(fā)生變化。 | Attribute | Description | Required | 
|---|
 | 表達式 | groovy腳本片段 | 是 |  | 變量 | 引用名,保存函數(shù)返回值,以便復用 | 否 | 
例如 ${__groovy(123*456)}
returns 56088
${__groovy("${var}".substring(0\,2))}
 
 請記得為文本字符串及代表文本字符串的JMeter變量添加必要的引號。
 __split函數(shù)__split會通過分隔符來拆分傳遞給它的字符串,并返回原始的字符串。如果分隔符緊挨在一起,那么函數(shù)就會以變量值的形式返回”?”。拆分出來的字符串,以變量${VAR_1}、${VAR_2}…以此類推的形式加以返回,變量的總數(shù)使用${VAR_n}。拖尾(只有分隔符即分隔符后面沒有值)的分隔符會被認為缺少一個變量,會返回”?”。另外,為了更好地配合ForEach控制器,現(xiàn)在__split會刪除第一個不用的變量(由前一次分隔符所設(shè)置)。比如 例如,在測試計劃中定義變量VAR=”a||c|”: ${__split(\${VAR},VAR),|} 
 
 | Attribute | Description | Required | 
|---|
 | 字符串 | 被操作的字符串 | 是 |  | 變量 | 引用名,保存函數(shù)返回值,以便復用 | 是 |  | 分隔符 | 默認是逗號分隔 | 否 | 
__XPath函數(shù)__XPath讀取XML文件,并在文件中尋找與指定XPath相匹配的地方。每調(diào)用函數(shù)一次,就會返回下一個匹配項。到達文件末尾后,會從頭開始。如果沒有匹配的節(jié)點,那么函數(shù)會返回空字符串,另外,還會向JMeter日志文件寫一條警告信息。 整個節(jié)點列表都會被保存在內(nèi)存之中。
 例如: ${__XPath(/path/to/build.xml, //target/@name)} 
 這會找到build.xml文件中的所有target節(jié)點,并返回下一個name屬性的內(nèi)容。 | Attribute | Description | Required | 
|---|
 | xml文件 | 需要解析的xml文件 | 是 |  | xpath | xpath表達式 | 是 | 
? 從實驗的結(jié)果來看,好像只能取屬性值,對應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函數(shù)__setProperty用于設(shè)置JMeter屬性的值。函數(shù)的默認返回值是空字符串,因此該函數(shù)可以被用在任何地方,只要對函數(shù)本身調(diào)用是正確的。 通過將函數(shù)可選的第3個參數(shù)設(shè)置為”true”,函數(shù)就會返回屬性的原始值。 屬性對于JMeter是全局的,因此可以被用來在線程和線程組之間通信。 | Attribute | Description | Required | 
|---|
 | 屬性名 | 需要修改的目標屬性 | 是 |  | 屬性值 | 屬性更新值 | 是 |  | true/false | 原屬性值是否返回 | 否 | 
? 
  __time使用指定的變量格式返回當前時間 | Attribute | Description | Required | 
|---|
 | 時間格式 | 將格式傳遞給SimpleDateFormat。該函數(shù)支持各種縮寫別名。如果省略格式,函數(shù)返回從1970年到當前時間的毫秒數(shù) | 否 |  | 變量 | 引用名,保存函數(shù)返回值,以便復用 | 否 | 
? 如果省略了格式字符串,函數(shù)返回從1970年到當前時間的毫秒數(shù)。其他情況下,當前時間會被轉(zhuǎn)成簡單日期格式。如果格式匹配 “/ddd”(ddd是十進制數(shù)),返回 從1970年的總毫秒數(shù)除以/ddd,包含如下形式:
 YMD = yyyyMMdd。
 HMS = HHmmss。
 YMDHMS = yyyyMMdd-HHmmss。
 USER1 = JMeter屬性time.USER1。
 USER2 = JMeter屬性time.USER2。
 
   用戶可以通過修改JMeter屬性來改變默認格式,例如,time.YMD=yyMMdd。
 
 __jexl2函數(shù)_jexl可以用于執(zhí)行通用JEXL表達式,并返回執(zhí)行結(jié)果。感興趣的讀者可以從下面這兩個網(wǎng)頁鏈接獲取更多關(guān)于JEXL的信息。 | Attribute | Description | Required | 
|---|
 | 表達式 | 要執(zhí)行的表達式 | 是 |  | 變量 | 引用名,保存函數(shù)返回值,以便復用 | 否 | 
如下變量可以通過腳本進行訪問。 log:函數(shù)記錄器。ctx:JMeterContext對象。vars:JMeterVariables對象。props:JMeter屬性對象。threadName:字符串包含當前線程名稱 (在2.3.2 版本中它被誤寫為”theadName”)。sampler:當前的采樣器對象(如果存在)。sampleResult:前面的采樣結(jié)果對象(如果存在)。OUT - System.out,例如 OUT.println(“message”)。
 JEXL可以基于它們來創(chuàng)建類,或者調(diào)用方法,例如: Systemclass=log.class.forName("java.lang.System");  
now=Systemclass.currentTimeMillis(); 
 需要注意的是,Web站點上的JEXL文檔錯誤地建議使用”div”做整數(shù)除法。事實上”div”和”/”都執(zhí)行普通除法。 i= 5 / 2;
i.intValue(); // or use i.longValue()
 JMeter 允許在表達式中包含復雜的語句。
 
 __jexl3詳見 __jexl2 Jmeter函數(shù)和變量(一) http://blog.csdn.net/yue530tomtom/article/details/76651040 Jmeter函數(shù)和變量(二) http://blog.csdn.net/yue530tomtom/article/details/77456506
 Jmeter函數(shù)和變量(三) http://blog.csdn.net/yue530tomtom/article/details/77533426
 Jmeter函數(shù)和變量(四) http://blog.csdn.net/yue530tomtom/article/details/77573247
 |