Jmeter(八) – 從入門到精通 – JMeter配置元件(詳解教程)
1.簡介
JMeter配置元件可以用來初始化默認值和變數,讀取文件數據,設置公共請求參數,賦予變數值等,以便後續取樣器使用。將在其作用域的初始化階段處理。配置元件(Config Element)提供對靜態數據配置的支援,可以為取樣器設置默認值和變數。
首先我們來看一下JMeter的配置元件,路徑:添加-配置元件;我們可以清楚地看到JMeter5中共有19個配置元件,如下圖所示:
如果上圖您看得不是很清楚的話,宏哥總結了一個思維導圖,關於JMeter5的配置元件類型,如下圖所示:
通過以上的了解,我們對配置元件有了一個大致的了解和認識。下面宏哥就給小夥伴或則童鞋們分享講解一些通常在工作中會用到的配置元件。
2.常用配置元件詳解
這一小節,宏哥就由上而下地詳細地講解一下常用的配置元件。
2.1CSV Data Set Config
1、我們先來看看這個CSV Data Set Config長得是啥樣子,如下圖所示:
2、參數詳解及說明,如下表所示:
參 數 | 描 述 | 是否必填 |
---|---|---|
Name | 腳本中顯示的這個元件的描述性名稱 | 是 |
Filename | 待讀取文件的名稱。可以寫入絕對路徑,也可以寫入相對路徑(相對於bin目錄),如果直接寫文件名,則該文件要放在bin目錄中。對於分散式測試,主機和遠程機中相應目錄下應該有相同的CSV文件 | 是 |
File Encoding | 文件讀取時的編碼格式,不填則使用作業系統的編碼格式 | 否 |
Ignore first line | 是否忽略首行,如果csv文件中沒有表頭,則選擇false | 是 |
Variable Names | 變數名列表,多個變數名之間必須用分隔符分隔。如果該項為空,則文件首行會被讀取並解析為列名列表 | 否 |
Delimiter | 參數分隔符,將一行數據分隔成多個變數,默認為逗號,也可以使用「\t」。如果一行數據分隔後的值比Vairable Names中定義的變數少,這些變數將保留以前的值(如果有值的話) | 是 |
Allow quoted data? | 是否允許變數使用雙引號,允許的話,變數將可以括在雙引號內,並且這些變數名可以包含分隔符 | 否 |
Recycle on EOF? | 是否循環讀取csv文件內容,達到文件結尾後,是否從文件開始循環重新讀取;默認為 true | 是 |
Stop thread on EOF? | 是否循環讀取csv文件內容,達到文件結尾後,執行緒是否該終止;默認為 true | 是 |
Recycle on EOF? | 當Recycle on EOF為False時,停止執行緒,當Recycle on EOF為True時,此項無意義,默認為 false | 是 |
Sharing mode | 1、All threads(默認):一個執行緒組內,各個執行緒(用戶)唯一順序取值;2、current thread:一個執行緒組內,各個執行緒(用戶)各自順序取值;3、執行緒組各自獨立,但每個執行緒組內各個執行緒(用戶)唯一順序取值; | 是 |
3、Recycle on EOF 和Stop thread on EOF的關係:
當Recycle on EOF 選擇true時,Stop thread on EOF選擇true和false無任何意義,因為既然前面已經設置了文件是不停的循環讀取,後面的控制stop就相當於失效;
當Recycle on EOF 選擇false時,Stop thread on EOF選擇true,則當執行緒數超過文件里的參數的個數時,實際請求數為參數的個數;
當Recycle on EOF 選擇false時,Stop thread on EOF選擇flase,當執行緒數超過文件里參數的個數時,實際請求次數為執行緒數,但當執行緒數超過參數次數時,由於沒有參數,所以結果仍然是失敗的。
4、Sharing mode:如果希望每個執行緒擁有自己獨立的值集合,那麼就需要創建一系列數據文件,為每個執行緒準備一個數據文件,如test1.csv、test2.csv等,使用文件名test${__threadNum}.csv,並將「sharing mode”設置為”Current thread”
All threads:文件在所有執行緒間共享。
Identifier:所有執行緒共享相同的標識,共享相同的文件。如有4個執行緒組,測試人員可以使用一個通用ID,以便在兩個或多個執行緒組之間共享文件。
Current thread:每個文件會針對每個執行緒單獨打開。
Current thread group:每個文件會針對每個執行緒組打開一次。
2.2HTTP Header Manager
支援用戶添加或者重寫HTTP請求頭。JMeter支援多個資訊頭管理器。多個資訊頭條目合併成一個資訊頭列表,跟隨http請求一併提交到服務端。
注意:敲黑板,敲腦殼!!!
(1)當有多個資訊頭管理器,且不同的管理器內有名稱相同的資訊頭條目存在時,順序靠前的管理器的資訊頭條目會覆蓋後面的;
(2)當只有一個資訊頭管理器,但管理器內有名稱相同的資訊頭條目時,會同時生效;
1、我們先來看看這個HTTP Header Manager長得是啥樣子,如下圖所示:
2、參數詳解及說明,如下表所示:
參數 | 描述 | 是否必填 |
Name | 請求頭的名稱,比如Content-Type | 否 |
Value | 請求頭的值,比如application/json | 否 |
3、常用請求頭,這些一般可以抓包和在瀏覽器中查到,如下表所示:
2.3HTTP Cookie Manager
主要有兩個功能:
一個功能是:像web瀏覽器一樣存儲和發送Cookie。如果有一個HTTP請求和相應里包含Cookie,Cookie管理器會自動存儲Cookie,那麼接下來針對特定web站點的所有請求中使用該Cookie。可在結果樹中查看。
接收到的Cookie可以被保存為變數,須定義屬性”CookieManager.save.cookie=true”。另外,在被存儲前Cookie名稱會加上前綴「COOKIE_”,要恢復早前處理方式,則定義屬性」CookieManager.name.prefix=”(一個或多個空格)。
如果啟動了該功能,那麼名稱為TEST的Cookie,可以通過${COOKIE_TEST}加以引用。手動為Cookie管理器添加一個Cookie(為所有JMeter執行緒所共享)。
1、我們先來看看這個HTTP Cookie Manager長得是啥樣子,如下圖所示:
2、參數詳細說明,如下表所示:
參數 | 描述 | 是否必填 |
Name | 樹中顯示此元件描述的名稱 | 是 |
Comments | 注釋 | 否 |
Clear cookie each Iteration | 每次執行緒組運行前,都會清楚cookie,但是如果是手動添加的cookie,不會被清除 | 否 |
Cookie Policy | 選擇Cookie的管理策略,建議選擇兼容性,兼容性強 | 是 |
User Define cookie | 用戶自定義cookie | 否 |
2.4HTTP Cache Manager
被用來為其作用域內的HTTP請求提供快取功能,如果「Use Cache-Control/Expires header When …”選中,那麼會根據當前時間來選擇,如果請求是」GET”,而時間指向未來,那麼取樣器就會立即返回,而無須從遠程伺服器請求URL,這樣是為了模擬瀏覽器的操作,請注意Cache-Control頭必須是「pulic」的,並且只有”max-age”終結選項會被處理,如果請求文檔自從其被快取以來沒有發生任何改變,那麼響應包體就會為空。
1、我們先來看看這個HTTP Cache Manager長得是啥樣子,如下圖所示:
2、參數詳細說明,如下表所示:
參數 | 描述 | 是否必填 |
Name | 樹中顯示此元件的描述性名稱 | 是 |
Comments | 注釋 | 否 |
Clear Cache each iteration | 如果選擇此選項,則在執行緒開始時清除快取。 | 否 |
Use Cache | 如果選擇此選項,則在執行緒開始時使用快取。 | 否 |
Max Number | 如果選擇此選項,則在執行緒開始時最大快取。 | 否 |
2.5HTTP Request Defaults
在實際測試計劃中,我們經常會碰到Http Sampler請求有較多的參數與配置會重複,每一個Http Sampler都單獨設置的話比較浪費時間和精力,為了節省工作量,JMeter提供了HTTP Request Defaults元件,用來把這些重複的部分封裝起來,一次設置多次使用。可以設定一些預設值,假設有10個請求,訪問域名和埠都是一樣的,那HTTP請求中就不再需要單獨配置了,比較方便(增加腳本的移植性)。
這個元件可以設置HTTP請求控制器使用的默認值。例如,圖中【伺服器名稱或IP】項目內填入了【example.com】,後面的HTTP請求如果IP也是example.com的話,那麼只要將【伺服器名稱或IP】留空,那麼這個欄位將自動繼承HTTP請求默認值中的值。其他諸如【協議】、【埠號】、【路徑】等同此。
1、我們先來看看這個HTTP Request Defaults長得是啥樣子,如下圖所示:
2、參數詳細說明,如下表所示:
參數 | 描述 | 是否必填 |
Name | 用作標識一個取樣器,建議使用一個見名知義的名稱 | 是 |
Comments | 注釋 | 否 |
Protocol | 協議,向目標伺服器發送HTTP請求時的協議,可以是http或者是Https | |
IP | HTTP請求發送的目標伺服器名稱或者IP地址 | |
Port Number | 目標伺服器埠 | |
Path | 目標URL路徑(不包括伺服器地址和埠) | |
Content encdoing | 內容的編碼方式 | |
Parameter | 參數 | |
body data | 參數 |
2.6Counter
計數器,顧名思義就是在測試執行過程中會記錄迭代次數。可以在執行緒組任何位置創建,允許用戶配置起點、最大值和增量。配置後,計數器將從起點循環到最大值,然後重新開始,直到執行緒結束。允許用戶創建一個計數器,可在執行緒組中任何地方被引用。
1、我們先來看看這個Counter長得是啥樣子,如下圖所示:
2、參數詳細說明,如下表所示:
參數 | 描述 | 是否必填 |
Name | 控制器名稱,可以隨意設置 | 否 |
Comments | 注釋,可以隨意設置 | 否 |
Starting value | 啟動,記錄數量起始值 | |
Increment | 遞增,記錄迭代次數步長,1後是2,步長就是1 | |
Maximum value | 記錄的最大值 | |
Number format | 計算器格式,可以是數字,例如000000(6位長度,000,000(6位長度,3位間隔開);字元加數字,例如CUST_000000(字元加6位數字 ) | |
Exported Variable Name | 引用變數名稱,記數器記錄的值可以存入的此引用名(變數),可供其他元件調用 | |
Track counter independently for each user | 與每位用戶獨立的跟蹤計數器,每個執行緒都有自己的計數器,相互不干擾 | |
Reset counter on each Thread Group Iteration | 每次迭代復原計數器 |
2.7DNS Cache Manager
1、我們先來看看這個DNS Cache Manager長得是啥樣子,如下圖所示:
2、參數詳細說明,如下表所示:
參數 | 描述 | 是否必填 |
Name | 樹中顯示此元件的描述性名稱 | |
Comments | 注釋 | |
Clear cache each iter | 清除每個迭代的快取,如果選擇此選項,則每次啟動新迭代時,都會清除每個執行緒的DNS快取。 | |
Use System DNS resolver | 使用系統DNS解析器;將使用系統DNS解析器。為了正確工作,請編輯 $ JAVA_HOME / jre / lib / security / java.security並添加networkaddress.cache.ttl = 0 | |
Use custom DNS resolver |
使用自定義DNS解析器;將使用自定義DNS解析器(來自dnsjava庫)。
|
2.8FTP Request Defaults
被用於設置FTP請求的默認值
1、我們先來看看這個FTP Request Defaults長得是啥樣子,如下圖所示:
2.9HTTP Authorization Manager
HTTP認證是一種安全機制,在客戶端、瀏覽器或者程式向伺服器發起請求時,需要提供用戶名和密碼且驗證通過(拿到憑證)才能繼續發起交互。
1、我們先來看看這個HTTP Authorization Manager長得是啥樣子,如下圖所示:
2.10JDBC Connection Configuration
1、我們先來看看這個JDBC Connection COnfiguration長得是啥樣子,如下圖所示:
2、關於JDBC Connection COnfiguration參數詳細說明,可以參考宏哥的另一篇文章是非常詳細的:傳送門。
2.11Java Request Defaults
1、我們先來看看這個Java Request Defaults長得是啥樣子,如下圖所示:
2.12Keystore Configuration
1、我們先來看看這個Keystore Configuration長得是啥樣子,如下圖所示:
2、參數詳細說明,如下表所示:
參數 | 描述 | 是否必填 |
Name | 樹中顯示此元件的描述性名稱。可以默認 | 是 |
Comments | 注釋 | 否 |
Preload | 預載,是否預載入秘鑰庫,設置為true通常是最佳選擇 | 是 |
Variable name holding certificate alias | 變數名稱,將包含用於客戶端證書身份驗證的別名。例如,將從CSV數據集中填充變數值。在螢幕截圖中,「 certificat_ssl」也將是CSV數據集中的變數。 | 否 |
Alias Start index | 從0開始在Keystore中使用的第一個鍵的索引。 | 是 |
Alias End index | 基於0的密鑰庫中要使用的最後一個密鑰的索引。使用「變數名稱持有證書別名」時,請確保其足夠大,以便在啟動時載入所有密鑰。 | 是 |
2.13LDAP Extended Request Defaults
1、我們先來看看這個LDAP Extended Request Defaults長得是啥樣子,如下圖所示:
2.14LDAP Request Defaults
1、我們先來看看這個LDAP Request Defaults長得是啥樣子,如下圖所示:
2.15Login Config Element
1、我們先來看看這個Login Config Element長得是啥樣子,如下圖所示:
2.16Random Variable
1、我們先來看看這個Random Variable長得是啥樣子,如下圖所示:
2、參數詳細說明,如下表所示:
2.17Simple Config Element
1、我們先來看看這個Simple Config Element長得是啥樣子,如下圖所示:
2、參數詳細說明,如下表所示:
參數 | 描述 | 是否必填 |
Name | 樹中顯示此元件的描述名稱 | 是 |
Comments | 注釋 | 是 |
Name | 參數名稱 | |
Value | 參數值 |
2.18TCP Sampler Config
TCP取樣器配置為TCP取樣器提供默認數據
1、我們先來看看這個TCP Sampler Config長得是啥樣子,如下圖所示:
2、參數詳細說明,如下表所示:
參數 | 描述 | 是否必填 |
Name | 樹中顯示此元件的描述性名稱 | |
Comments | 注釋 | |
TCPClient classname | TCPClient類的名稱,默認屬性tcp.handler,使TCPClientImpl失敗 | |
Sever Name or IP | TCP伺服器的名稱或者IP | |
Port Number | 使用的埠 | |
Re-use connection | 重用連接,如果選擇,則連接保持打開狀態,否則,在讀取數據後將其關閉 | |
Close connection | 關閉連接,如果選擇此項,則在運行取樣器後將連接關閉 | |
Set NoDelay | 設置節點布局,應該設置nodelay | |
SO_LINGER | 創建套接字時,以指定的延遲時間(以秒為單位)啟用/禁用SO_LINGER。如果將「SO_LINGER”值設置為0,則則可以防止大量套接字處於TIME_WAT 的狀態 | |
End of line byte value | 判斷行結束的byte值,如果你指定的值大於127或者小於-128,則會跳過EOL檢測。比如伺服器端返回的字元串都是以回車符結尾,那麼我們可以將該選項設置成10。 | |
Text to send | 文字發送,要發送的文字 | |
Connect | 連接超時(毫秒。0禁用) | |
Response | 響應超時(毫秒。0禁用) |
2.19User Defined Variables
如果您有多個執行緒組,請確保對不同的值使用不同的名稱,因為UDV在執行緒組之間共享。同樣,這些變數在處理完元素之後才可用,因此您不能引用在同一元素中定義的變數。您可以引用在早期UDV或測試計劃中定義的變數。
1、我們先來看看這個User Defined Variable長得是啥樣子,如下圖所示:
2、參數詳細說明,如下表所示:
參數 | 描述 | 是否必填 |
Name | 樹中顯示此元件描述的名稱 | |
Comments | 注釋 | |
User Define Variables | 用戶定義的變數。變數名稱/值對。您需要在$ {…}結構的方括弧內放置「名稱」(Name)列下的字元串,以便以後使用變數。然後,整個$ {…}將由「值」列中的字元串替換 |
3.小結
好了,今天關於JMeter的配置元件就分享到這裡,其中有些常用的要熟練掌握。
您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得隨手點波 推薦 不要忘記哦!!!
別忘了點 推薦 留下您來過的痕迹