Stories

Detail Return Return

每週讀書與學習->JMeter主要元件詳細介紹(二)函數助手 - Stories Detail

每週讀書與學習是由清華大學出版社出版的《JMeter核心技術、性能測試與性能分析》一書的作者推出,分享作者多年的IT從業經歷,希望對很多計算機科學技術IT類專業畢業生以及IT從業者有所幫助。

1、函數助手

函數助手是Jmeter提供的一個非常有用的工具,尤其是在性能測試腳本的編寫中,由於經常需要用到一些特有的函數來生成性能測試腳本中需要的數據,函數助手就可以提供這方面的幫助。

函數助手位於Jmeter菜單的工具->函數助手對話框下面,如下圖所示,也可以通過快捷鍵Ctrl+Shift+F1來打開函數助手對話框。

函數助手中包含的常見函數如下,可以從函數助手界面中的下拉框中選擇到如下介紹的函數。 

  • BeanShell:使用BeanShell腳本語言來生成BeanShell類型的函數,比如如下圖所示,通過BeanShell腳本語言來計算123*456的值,並且將結果賦值給var_beanshell變量的操作,就可以通過函數助手來生成最終的函數表達式為${__BeanShell(123*456,var_beanshell)}。

  • changeCase:用於將一個給定的字符串轉換為指定模式(包括UPPER 、LOWER 、CAPITALIZE )下的字符串,比如${__changeCase(string,UPPER,var_result)} 用於將小寫的string轉換為大寫的STRING,並且賦值給var_result這個變量,如下圖所示。

  • regexFunction:通常用於通過正則表達式來解析相應的結果字符串。
  • counter:即為計數器,在每次被調用時都會產生一個新的數字,從1開始,每次調用一次就遞增加1,計數器支持配置為每個線程用户具有一個自己單獨的計數器,也可以配置為多個線程用户共用一個計數器,計數器是通過整形變量來保存的,所以計數器的最大值為2147483647。
  • threadNum:用於返回當前正在執行的線程的編號,在每個線程組中threadNum具有唯一性。
  • threadGroupName:用於返回正在執行的線程組的名稱。
  • intSum:用於計算兩個或多個整數值的和。
  • longSum:計算兩個或多個long型數字(長值)的和,超過整形長度(-2147483648到2147483647的區間內)就應該使用longSum來進行計算。
  • StringFromFile:用於從文本文件中讀取字符串,每次調用它時,它都會從文件中讀取下一行,並且所有線程用户共享同一個實例,所以每個線程用户都會讀取到不同的行,如果當讀取到文件末尾的最後一行時,它將會從頭開始重新再次讀取,需要注意的是如果性能測試腳本中有多個對該函數的引用,即使打開的文件名相同,每個引用也都會獨立打開一個文件。
  • machineName:用於返回本地主機名。
  • machineIP:用於返回本地IP地址。
  • javaScript:用於執行一段javaScript腳本並且返回執行後的結果值。
  • Random:用於返回一個介於給定最小值和最大值範圍之間的隨機數。
  • RandomDate:用於返回一個介於給定開始日期和結束日期值之間的隨機日期。
  • RandomString:用於使用指定字符中的字符返回長度為隨機的字符串。
  • RandomFromMultipleVars:用於根據源變量提供的變量值返回隨機值。
  • UUID:用於返回一個偽隨機類型的通用唯一標識符。
  • CSVRead:從CSV文件中讀取並返回一個字符串,需要注意的是每個線程用户都有自己的內部指針指向文件數組中的當前行,因此每個線程用户讀取到的行數是不一樣的。

如下圖所示,在C:\data目錄下,創建了一個 csv_sample.csv文件,並且該文件中有兩列數據。

當使用CSVRead函數來讀取csv_sample.csv中的數據時,可以通過如下圖所示的方式來讀取。

從圖中可以看到在用於獲取值的CSV文件 | *別名中應該設置csv_sample.csv文件的絕對路徑,由於該文件是放在C:\data目錄下,所以應該將其絕對路徑設置為C:/data/csv_sample.csv。在CSV文件列號| next| *alias中設置需要讀取的列號,默認是從0開始,也就是0代表了第一列,所以從圖中可以看到當填入0時,The result of the function is 的輸出結果為name,而根據上圖中可以看到name 剛好是第一列,所以讀取的確實就是第一列的數據。在實際使用時可以通過${__CSVRead(C:/data/csv_sample.csv,0)} 讀取到第一列第一行的數據,但如果需要讀取第一列的下一行的數據,需要通過${__CSVRead(C:/data/csv_sample.csv,0)} ${__CSVRead(C:/data/csv_sample.csv,next)}來進行讀取。

由於每個線程用户都有自己的內部指針指向文件數組中的當前行,因此每個線程用户讀取到的行數是不一樣的,如下圖所示,當Jmeter的線程組中存在多個併發線程用户時,使用${__CSVRead(C:/data/csv_sample.csv,0)}讀取數據時,每個線程會按照順序依次從第一行開始讀取,第一個線程讀取的是第一行,當到第二線程時,讀取的就是第二行了。

  • Property:用於返回Jmeter的屬性值,需要注意的是如果找不到屬性值,並且沒有提供默認值,則返回屬性名稱。
  • log:日誌中輸出一條消息,並返回其輸入字符串。
  • logn:與log函數類似,日誌中輸出一條消息,並返回其輸入字符串。
  • groovy:和BeanShell很類似,使用groovy腳本語言來生成groovy類型的函數,比如如下圖所示,通過groovy腳本語言來計算30*40的值,並且將結果賦值給var_groovy變量的操作,就可以通過函數助手來生成最終的函數表達式為${__groovy(30*40,var_groovy)} 。

  • Xpath:用於讀取指定的XML文件並匹配Xpath,每次調用函數時,都會返回下一個匹配項,如果沒有匹配的節點,則該函數將返回空字符串,並將警告提示消息輸出到JMeter日誌文件中。
  • setProperty:用於設置JMeter屬性的值。
  • time:返回指定格式的當前時間。
  • jexl2:返回jexl(Java Expression Language 的簡寫,是一種表達型的腳本語言)表達式的求值結果,更多詳細介紹可以參考網址:https://commons.apache.org/proper/commons-jexl/。
  • split:根據指定分隔符拆分傳遞給它的字符串,並返回原始字符串,如下圖所示,原始字符串123,456通過指定的逗號進行分割後,會賦值給var變量,然後自動生成三個變量,var_1=123,var_2=45,var=123,456。

  • evalVar:返回對存儲在變量中的表達式求值的結果。
  • eval:返回計算字符串表達式的結果。
  • unescape:返回Java轉義字符串的求值結果。
  • unescapeHtml:用於將包含HTML實體轉義符的字符串解壓縮為包含與轉義符對應的實際Unicode字符的字符串。
  • escapeHtml:用於返回HTML實體轉義字符串中字符。
  • urldecode:用於解碼application/x-www-form-urlencoded類型的字符串。
  • urlencode:用於將字符串編碼為application/x-www-form-urlencoded類型的字符串。
  • FileToString:用於讀取整個文件中的字符串並且返回。
  • samplerName:用於返回當前採樣器的名稱。
  • TestPlanName:返回當前測試計劃的名稱。
  • escapeXml:返回XML 1.0實體轉義字符串中的字符。
  • timeShift:以給定格式返回日期,並添加指定的秒、分鐘、小時、天或月數。
  • digest:返回特定哈希算法中的加密值,該值包含可選的salt、大寫字母和變量名。
  • dateTimeConvert:將源格式的日期轉換為目標格式,並可選擇將結果存儲在指定的變量名中。
  • isPropDefined:用於判斷指定的屬性是否存在,如果存在返回true,否則返回false。
  • isVarDefined:用於判斷指定的變量名是否存在,如果存在返回true,否則返回false。
  • StringToFile:用於將指定字符串寫入文件,每次調用它時,它都會向文件追加或覆蓋一個指定的字符串。

2、本次學習總結

  • 函數助手的使用,函數助手是Jmeter中的一個非常重要且有用的工具,在性能測試腳本編寫過程中經常會被使用,在函數助手中提供了大量的已有函數來輔助性能測試腳本編寫者生成各種需要的測試數據。

出處:本次學習的內容參考自清華大學出版社出版的《JMeter核心技術、性能測試與性能分析》一書

user avatar kkkk11 Avatar
Favorites 1 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.