都忘了Jmeter4.0已發佈((*^▽^*))具體優化項還沒體驗,記錄一下,傳送門:http://jmeter.apache.org/download_jmeter.cgijava
Jmeter的系統函數已經發布了許多函數,而且實現了N多功能,(能夠自行開發自定義函數哦~)記幾個經常使用的函數:shell
${__time(,)}-->時間戳:apache
參數一:日期格式---${__time(yyyy-MM-dd-HH-mm-ss,)}dom
這裏邊有個誤區,大寫M是月份,小寫m是分鐘。函數
參數二:存放得到當前時間值的參數名稱優化
${__Random(,,)}-->隨機函數編碼
填入數值區間便可命令行
${__StringFromFile(,,,)}-->讀取本地文件(csv文件)線程
相似CSV Data Set Config,可是比它更爲強大一點,__StringFromFile函數的強大之處在於它能夠支持從多個文件中讀取數據。調試
例如給定函數表達式${__StringFromFile(F:\jmeter-project\test-project\config-data\test#‘.’csv,,1,99)},那麼__StringFromFile函數將會讀取該目錄下的test1.csv,test2.csv。。。test99.csv做爲須要讀取的數據文件。
例如給定函數表達式${__StringFromFile(F:\jmeter-project\test-project\config-data\test0000#‘.’csv,,1,99)},那麼__StringFromFile函數將會讀取該目錄下的test0001.csv。。。test00099.csv做爲須要讀取的數據文件
參數一:文件名(絕對路徑)
參數二:存放取的數據的參數列表
${__intSum(,,)}和${__longSum(,,)}-->分別用來進行整型和長整型數據的加法運算。這兩個函數都可爲可變參數列表的函數,可用來進行任意個整型或長整型數據的加法運算。
${__setProperty(,,)}-->用於在運行時設置Jmeter中的任何屬性的值(參見「線程組之間變量傳遞」)
${__eval()}和${__evalVar()}-->用於計算一個參數表達式的值。
例如:給定參數值:table = mytable
column = username
username = dennis
SQL = select ${column} from ${table} where userid = '${username}'
使用${__eval(${SQL})}便獲得的值爲 select username from mytable where username = 'dennis'.
${__evalVar()}與前者基本一致,惟一不一樣的是,${__evalVar()}函數能夠將計算後的值存放到一個參數中。
${__threadNum}與${__machineName()}-->這兩個函數用於得到執行當前函數的線程號(1開始)和執行當前Test plan的機器名。在調試或記錄日誌時,能夠用這兩個函數輸出與線程號和機器相關的信息
${__unescapeHtml()}和${__escapeHtml()}-->這兩個函數用於對字符串進行編碼/解碼處理。名稱便可看出${__escapeHtml()} 對於任意字符串按照HTML格式進行編碼;而${__unescapeHtml()}函數則是對HTML編碼後的字符串進行解碼。
${__javaScript(,)}->該函數用於執行一段給定的JavaScript腳本,返回值爲該JavaScript執行的結果。
${__BeanShell(,)}-->該函數容許用戶運行一段自定義的Beanshell腳本,腳本能夠用來設置Jmeter的屬性和參數值,也可返回數據。詳情參見前面Beanshell隨筆。
具體函數源碼可在jmeter\apache-jmeter-3.2\lib\ext目錄下找到ApacheJMeter_functions.jar的包,進行查看其處理邏輯
可仿照其源碼進行自定義邏輯,自行開發自定義函數,打包至lib\ext目錄下,進行使用。
一個典型的應用:在命令行運行Test plan 時,從命令行指定Thread Group中的線程數和腳本運行時長:
使用__property和__P函數獲取屬性值
相似這樣使用:
命令行中可直接指定線程的數量(默認爲1):
jmeter -n -t demo.jmx -Jthread_count =10 -Jduration = 60
該Test plan以10線程運行,運行時長60s(具體會在第三方集成用到)