JMeter24個常用函數(一)

發表于:2020-11-13 10:43  作者:天性懶惰   來源:博客園

字體: | 上一篇 | 下一篇 |我要投稿 | 推薦標簽: 性能測試工具 Jmeter

  ·JMeter提供了很多函數,如果能夠熟練使用,可以為腳本帶來很多方便。
  ·JMeter函數是一種特殊值,可用于除測試計劃外的任何組件。
  ·函數調用的格式如下所示:
  ${__functionName(var1,var2,var3)}
  其中,__functionName為函數名,括號內是函數的參數,無參數時可以不用括號,如${__UUID}
  ·Tips:
  如果參數包含逗號,那么一定要使用“\”來轉義,否則JMeter會把它當作一個參數分隔符
  實際使用時,可通過函數助手對話框選擇函數,設置參數后,點擊生成按鈕生成函數字符串。
  一、__BeanShell:beanshell函數
  1、它有兩個參數,第一個參數是要執行的語句,可以是beanshell語句或者是文件地址,是必選參數;第二個參數是保存結果的變量名稱,非必選參數。
  2、Example:
  ${__BeanShell(123*456)}:返回56088
  ${__BeanShell(source("function.bsh"))}:會執行外部腳本function.bsh,并返回結果
  ${__BeanShell(importjava.util.*;Propertiesprops=System.getProperties();StringosName=props.getProperty("os.name");if(osName.contains("Windows")) return443;return8443;)}:判斷端口
  3、與beanshell元件比較:
  該函數與beanshell元件(beanshellsampler、beanshellpreprocess等)作用是一樣的,只是beanshell函數更常用于一些簡單的判斷或計算等,可以把少量的腳本放在函數中直接賦值給一個變量,而不用總是添加beanshell元件。
  二、__regexFunction:正則表達式函數
  1、該函數使用用戶提供的正則表達式來解析前面的服務器響應(或者是某個變量值)。函數會返回一個有模板的字符串,其中攜帶有可變的值。
  2、__regexFunction還可以被用來保存值,以便供后續使用。在函數的第6個參數中,測試人員可以指定一個引用名。在函數執行以后,測試人員可以使用用戶定義值的語法來獲取同樣的值。例如,如果測試人員輸入"refName"作為第6個參數,那么測試人員可以使用:
  ${refName}來引用第2個參數(Templateforthereplacementstring)的計算結果,這依賴于函數的解析結果。
  ${refName_g0}來引用函數解析后發現的所有匹配結果。
  ${refName_g1}來引用函數解析后發現的第一個匹配組合。
  ${refName_g#}來引用函數解析后發現的第n個匹配組合。
  ${refName_matchNr}來引用函數總共發現的匹配組合數目。
  具體參數描述如下:
  其實這個函數的作用跟正則表達式提取器的作用是類似的。
  三、__counter:計數器函數
  1、每次調用計數器函數都會產生一個新值,從1開始每次加1。計數器既可以被配置成針對每個虛擬用戶是獨立的,也可以被配置成所有虛擬用戶公用的。
  2、如果每個虛擬用戶的計數器是獨立增長的,那么通常被用于記錄測試計劃運行了多少遍。全局計數器通常被用于記錄發送了多少次請求。
  3、計數器使用一個整數值來記錄,允許的最大值為2,147,483,647。
  4、目前計數器函數實例是獨立實現的(JMeter2.1.1及其以前版本,使用一個固定的線程變量來跟蹤每個用戶的計數器,因此多個計數器函數會操作同一個值)。全局計數器(FALSE)每個計數器實例都是獨立維護的。
  5、該函數也有對應的配置元件:計數器,功能類似。
  四、__threadNum
  函數__threadNum只是簡單地返回當前線程的編號。線程編號不依賴于線程組,這就意味著從函數的角度看來,某個線程組的線程#1和另一個線程組的線程#1是沒有區別的。另外,該函數沒有參數。
  這一函數不能用在任何配置元件中(如用戶定義的變量),原因在于配置元件是由一個獨立線程運行的。另外在測試計劃(TestPlan)中使用也是沒有意義的。所以,很少用。
  五、__intSum:整數求和函數
  1、函數__intSum可以被用來計算兩個或者更多整數值的合。至少需要兩個整數,如果指定變量名則名稱中必須包含一個非數字字母,否則它會被當成另一個整數值,而被函數用于計算。
  2、當有多個整數時點擊添加按鈕來增加參數,但是需要注意的是,添加完參數后,點擊”生成”的函數默認是把手動添加的函數放在后面,這時需要手動調整變量名的位置,把它放到最后,否則會報錯。
  六、__longSum:長整型求和函數
  該函數用來計算兩個或更多長整型值的和,使用方法跟上面的__intSum函數一樣。
  七、__StringFromFile:讀取文件中的字符串函數
  1、該函數用來從文本文件中讀取字符串。支持讀取多個文件。
  2、使用配置元件CSVDataSetConfig,也能達到相同的目的,而且方法更簡單,但是它目前不支持多個輸入文件。
  3、每次調用函數,都會從文件中讀取下一行。當到達文件末尾時,函數又會從文件開始處重新讀取,直到最大循環次數。如果在一個測試腳本中對該函數有多次引用,那么每一次引用都會獨立打開文件,即使文件名是相同的(如果函數讀取的值,在腳本其他地方也有使用,那么就需要為每一次函數調用指定不同的變量名)。
  4、如果在打開或者讀取文件時發生錯誤,那么函數就會返回字符串"**ERR**"。
  示例:
  ${_StringFromFile(demo.txt,,,)}讀取demo.txt
  ${_StringFromFile(PIN#'.'DAT,,1,2)}讀取demo1.txt,demo2.txt
  ${_StringFromFile(PIN.DAT,,,2)}讀取demo.txt兩次
  5、函數的第三個參數:初始的序列號,如果省略,那么結束序列號就代表文件的循環讀取次數。
  6、函數的第四個參數:結束序列號,如果省略,那么序列號會無限增長。
  7、讀取多個文件示例:
  需要在文件名中使用序列號:當使用序列號時,文件名需要使用格式字符串java.text.DecimalFormat。當前的序列號會作為唯一的參數。如果不指明可選的初始序列號,就使用文件名作為起始值。一些有用的格式序列如下:
  #:插入數字,不從零開始,不包含空格。
  000:插入數字,包含3個數字組合,不從零開始。
  例如:
  pin#'.'dat->pin1.dat,...pin9.dat,pin10.dat,...pin9999.dat
  pin000'.'dat->pin001.dat...pin099.dat...pin999.dat...pin9999.dat
  pin'.'dat#->pin.dat1,...pin.dat9...pin.dat999
  如果不希望某個格式字符被翻譯,需要為它加上單引號。注意上面的"."是格式字符,必須被單引號所包含。
  比如現在要同時讀取兩個文件,分別是PIN1.DAT,PIN2.DAT:
  ${_StringFromFile(PIN#'.'DAT,,1,2)}:同時讀取PIN1.DAT,PIN2.DAT。
  ${_StringFromFile(PIN.DAT,,,2)}:讀取PIN.DAT兩次。
  ${_StringFromFile(test#'.'txt,,1,2)}:同時讀取test1.txt,test2.txt
  八、__machineName
  函數__machineName返回本機的主機名。
  九、__javaScript
  1、函數__javaScript可以用來執行JavaScript代碼片段(非Java),并返回結果值。
  2、JMeter的_javaScript函數會調用標準的JavaScript解釋器,還可以直接調用jmeter的內置函數。
  3、請記得為文本字符串添加必要的引號。另外,如果表達式中有逗號,請確保對其轉義。例如,${__javaScript('${sp}'.slice(7\,99999))},對7之后的逗號進行了轉義。
  十、__Random:隨機數函數
  函數__Random會返回指定最大值和最小值之間的隨機數。

  本文內容不用于商業目的,如涉及知識產權問題,請權利人聯系博為峰小編(021-64471599-8017),我們將立即處理

評 論

論壇新帖

頂部 底部


建議使用IE 6.0以上瀏覽器,800×600以上分辨率,法律顧問:上海瀛東律師事務所 張楠律師
版權所有 上海博為峰軟件技術股份有限公司 Copyright©51testing.com 2003-2020, 滬ICP備05003035號
投訴及意見反饋:webmaster@51testing.com; 業務聯系:service@51testing.com 021-64471599-8017

滬公網安備 31010102002173號

51Testing官方微信

51Testing官方微博

掃一掃 測試知識全知道

日本av