JMeter36個內置函數及11個新增函數介紹


JMeter內置了36個函數,這些函數可以通過函數助手進行編輯和測試。了解這些函數,不僅能提高JMeter的使用熟練度,也有助於知曉測試工具或測試框架通用的函數有哪些,在自主設計時,作為參考借鑒。

JMeter函數調用的寫法是${__function()},注意函數名前面需要添加雙下划線前綴

__BeanShell腳本語言

執行BeanShell腳本。BeanShell是Java編寫的Java源碼解釋器,小型、免費、可嵌入,可以像寫腳本語言一樣寫Java,無需編譯,立即運行

示例,字符串拼接:

image-20210529095244217

輸入表達式后,點擊Generate & Copy to clipboard按鈕,會生成函數語法並復制到粘貼板,同時輸出函數運行結果。

__char

把數字轉化成Unicode字符。

示例,數字65轉化成字符A:

image-20210531142353946

__counter

統計線程的迭代次數。它有兩個參數:

  • 第一個參數,如果為true,那么每個線程單獨統計;如果為false,那么所有線程合在一起統計。
  • 第二個參數,變量名。

示例:

image-20210531142653887

__CSVRead

從CSV文件中讀取數據。

固定取值

始終取第n列第一行的值。

示例:

image-20210531144416950

動態取值

使用next每次迭代取下一行數據。注意必須先取列,再取行。

示例:

image-20210531144832367

文件別名

給文件名起個別名。

示例:

image-20210531145335502

__escapeHtml

HTML轉義。

示例:

image-20210531145738207

__escapeOroRegrexChars

把一些Java正則表達式引擎不識別的正則表達式轉換一下,這樣就可以識別了。轉換過程中使用了ORO正則表達式庫。

示例:

image-20210531150336942

__eval

計算表達式。

示例:

image-20210531152230689

__evalVar

把表達式的結果存入變量。

示例:

image-20210531152831042

image-20210531152841364

__FileToString

讀取文件全部內容,以字符串形式保存到變量中。

示例:

image-20210531153542939

__intSum

int型求和。

示例:

image-20210531154020310

__longSum

跟上個一樣,只是換成了long型。

__javaScript

執行JavaScript腳本。

示例:

image-20210531154838870

__jexl

JEXL全稱是Jakarta Commons Jexl,它是一種表達式語言解釋器。jexl能直接訪問JMeter中的部分變量:

  • log:直接調用logger函數
  • ctx:獲取JMeterContent對象
  • vars:獲取JMeter定義的變量
  • props:獲取JMeter配置屬性
  • threadName:獲取JMeter線程名
  • sampler:獲取Sampler實例
  • sampleResult:獲取SamplerResult實例
  • OUT:OUT.println(),類似System.out.println

示例:

image-20210531155821116

__log

記錄日志,並返回輸入的字符串。

日志級別包括:

控制台指JMeter GUI的感嘆號打開的控制台;標准輸出窗口指打開JMeter時的CMD窗口。

  • OUT:打印到控制台和標准輸出窗口,相當於System.out.print()
  • ERR:打印到控制台和標准輸出窗口,相當於System.err
  • DEBUG:打印到控制台,DEBUG級別以上
  • INFO:打印到控制台,INFO及ERROR級別
  • WARN:打印到控制台,WARN、INFO、ERROR級別
  • ERROR:打印到控制台,僅ERROR級別

后四種級別DEBUG、INFO、WARN、ERROR是否寫入JMeter的運行時日志,需要通過jmeter.property文件進行配置。

示例:

image-20210531162511075

__logn

與上一個類似,區別是它只記錄日志,不返回值。

__machineIP

本機的IP。

__machineName

本機的計算機名。

__P

獲取命令行中定義的屬性,默認值為1。

示例:

image-20210531164008854

在非GUI方式運行測試計划時,可以用這個函數來做參數化,由運行命令動態指定參數值,方便跟Jenkins、Maven或者Ant集成。

__property

獲取jmeter.properties文件中設置的JMeter屬性。

示例:

image-20210531164712287

__Random

隨機值。

示例:

image-20210531164848189

__RandomString

隨機字符串。

示例:

image-20210531164946221

__regexFunction

跟后置處理器的正則表達式提取器用法一樣。

示例:

image-20210531170414328

image-20210531170451003

__samplerName

獲取當前sampler名稱。

__setProperty

動態設置JMeter屬性。

示例:

image-20210531170731146

__split

拆分字符串。

image-20210531171136879

__StringFromFile

不如使用CSV Data Set Config。

__TestPlanName

獲取測試計划的名字。

__threadNum

返回當前線程號,從1開始遞增。

示例:

image-20210531172632373

__time

返回當前時間,由SimpleDateFormat類來處理函數格式。

  • 年:yyyy
  • 月:MM
  • 日:dd
  • 時:hh
  • 分:mm
  • 秒:ss

示例:

image-20210531172851631

__unescape

返轉escape字符,如\r\n轉成CRLF。

__unescapeHtml

反轉HTML,如  轉成空格。

__urldecode

反轉URL中的Unicode編碼字符,如word%22school%22轉成word"school"

__urlencode

轉成Unicode編碼字符,如word"school"轉成word%22school%22

__UUID

生成唯一字符串。

__V

執行變量表達式並返回結果,如果需要嵌套的使用變量時,就可以用到它。

比如定義變量a1=2, b1=1${a1}``${b1}都可以調用成功。

但是如果想通過${a${b1}}來調用${a1}就不能成功。

使用${__V(a${b1})}等價於${__V(a1)}等價於${a1}就可以了。

__XPath

匹配XML文件內容。

示例:

<?xml version="1.0" encoding="utf-8"?>
<company>
	<name>
    	<address>
            shanghai
        </address>
    </name>
</company>

XPath表達式/company/name/address/text()取值shanghai。

XPath可以參考https://www.w3school.com.cn/xpath/index.asp

最近新增

除了上述36個內置函數,JMeter最近還新增了以下函數:

changeCase

改變大小寫

dateTimeConvert

日期格式轉換

digest

加密算法,如SHA-1, SHA-256, MD5等

escapeXml

轉義XML

groovy

groovy表達式

isPropDefined

屬性是否定義

isVarDefined

變量是否定義

RandomDate

隨機日期

RandomFromMultipleVars

從多個變量中取隨機值

StringToFile

把字符串寫入文件中

timeShift

時間偏移,比如計算某一天的前三天

小結

本文對36個內置函數,以及11個新增函數進行了介紹,靈活選擇使用這些函數,能起到事半功倍的效果。函數助手可以很方便的對函數進行預覽和測試。最新最全的函數及其使用介紹可以到官網查閱:https://jmeter.apache.org/usermanual/functions.html

參考資料:

《全棧性能測試修煉寶典JMeter實戰》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM