JMeter參數(shù)化4種實現(xiàn)方式(小結)
1 參數(shù)化釋義
什么是參數(shù)化?從字面上去理解的話,就是事先準備好數(shù)據(jù)(廣義上來說,可以是具體的數(shù)據(jù)值,也可以是數(shù)據(jù)生成規(guī)則),而非在腳本中寫死,腳本執(zhí)行時從準備好的數(shù)據(jù)中取值。
參數(shù)化:是自動化測試腳本的一種常用技巧,可將腳本中的某些輸入使用參數(shù)來代替,如登錄時利用GET/POST請求方式傳遞參數(shù)的場景,在腳本運行時指定參數(shù)的取值范圍和規(guī)則。
腳本在運行時,根據(jù)需要選取不同的參數(shù)值作為輸入,該方式稱為數(shù)據(jù)驅動測試(Data Driven Test),而參數(shù)的取值范圍被稱為數(shù)據(jù)池(Data Pool)。
JMeter提供了多種參數(shù)化方式,下面就其中常用的4種展開闡述。
| 方式 | 適用場景 |
|---|---|
| CSV Data Set Config | 我們通常所指的參數(shù)化。數(shù)據(jù)存儲在文件中,參數(shù)化取值范圍大,靈活性強 |
| User Parameter | 適用于參數(shù)取值范圍很小時 |
| 函數(shù)助手 | _Random等函數(shù),生成隨機數(shù)字和隨機字符串實現(xiàn)參數(shù)化 |
| User Defined Variables | 用戶自定義變量,更多用于設置全局變量 |
2 參數(shù)化實現(xiàn)
2.1 CSV Data Set Config
在JMeter中提起參數(shù)化,我們默認就想到CSV Data Set Config(以下簡稱CSV),CSV能夠讀取文件中的數(shù)據(jù)并生成變量,被JMeter腳本引用,從而實現(xiàn)參數(shù)化。下面我們來詳細探究一下。
CSV簡介
線程組右鍵–>添加–>配置元件–>CSV Data Set Config,就創(chuàng)建了一個CSV,界面是這個樣子的:

各項參數(shù)詳解如下:
| 參 數(shù) | 描 述 | 必 須 |
|---|---|---|
| Name | 腳本中顯示的這個元件的描述性名稱 | 是 |
| Filename | 文件名。待讀取文件的名稱??梢詫懭虢^對路徑,也可以寫入相對路徑(相對于bin目錄),如果直接寫文件名,則該文件要放在bin目錄中。對于分布式測試,主機和遠程機中相應目錄下應該有相同的CSV文件 | 是 |
| File Encoding | 文件編碼。文件讀取時的編碼格式,不填則使用操作系統(tǒng)的編碼格式 | 否 |
| Variable Names | 變量名稱。多個變量名之間必須用分隔符分隔。如果該項為空,則文件首行會被讀取并解析為列名列表 | 否 |
| Ignore first line | 是否忽略首行?如果csv文件中沒有表頭,則選擇false | 是 |
| Delimiter | 分隔符。將一行數(shù)據(jù)分隔成多個變量,默認為逗號,也可以使用“\t”。如果一行數(shù)據(jù)分隔后的值比Vairable Names中定義的變量少,這些變量將保留以前的值(如果有值的話) | 是 |
| Allow quoted data? | 是否允許變量使用雙引號?允許的話,變量將可以括在雙引號內,并且這些變量名可以包含分隔符 | 否 |
| Recycle on EOF? | 遇到文件結束符是否再次循環(huán)?默認為 true | 是 |
| Stop thread on EOF? | 遇到文件結束符是否停止線程?默認為 true | 是 |
| Recycle on EOF? | 當Recycle on EOF為False時,停止線程,當Recycle on EOF為True時,此項無意義,默認為 false | 是 |
| Sharing mode | 線程共享模式。1、All threads(默認):一個線程組內,各個線程(用戶)唯一順序取值;2、current thread:一個線程組內,各個線程(用戶)各自順序取值;3、線程組各自獨立,但每個線程組內各個線程(用戶)唯一順序取值; | 是 |
需要著重說明一下的是Sharing mode,也就是線程共享模式。線程共享模式,是指多個線程對文件數(shù)據(jù)取值順序模式,JMeter提供了3種模式:
All threads:所有線程。如果腳本有多個線程組,在這種模式下,各線程組的所有線程也要依次唯一順序取值。例如,腳本有2個線程組,各有2個線程,文件內有5行數(shù)據(jù),腳本運行時,將如下圖一樣循環(huán)往復取值:

Current thread group:當前線程組。各個線程組之間隔離,線程組內的線程順序唯一取值。

Current thread:當前線程。這種模式下,每個線程獨立,順序唯一取值。

CSV實例
下面看一個實例。首先有userInfo.txt的文件,放置在bin目錄中,內容如下:


- 文件名:文件在bin目錄中,使用相對目錄
- 變量名稱:兩列數(shù)據(jù)分別屬于mobile和password兩個變量
- 分隔符:以逗號分割
在HTTP請求中引用CSV生成的變量的方式是${變量名}的方式:

運行腳本,察看結果樹:

可以看到,文件中的數(shù)據(jù)被腳本成功引用。JMeter使用CSV實現(xiàn)參數(shù)化就是這么簡單。
注意事項
CSV使用中最常見的一個問題是文件路徑不對。當遇到這種問題時,因為運行腳本沒有明顯提示,許多人遇到后會感覺很懵,不知道問題在哪。其實,仔細觀察會發(fā)現(xiàn)右上角黃色三角處數(shù)字在增加,點擊該區(qū)域便打開了日志,日志里記錄了相應錯誤:File userInfo2.txt must exist and be readable,也就是提示參數(shù)化文件不存在或路徑不可達。

2.2 User Parameters
User Parameters,也就是用戶參數(shù),也能實現(xiàn)參數(shù)化。
創(chuàng)建方式:HTTP請求上右鍵–>添加–>前置處理器(Pre processors)–>用戶參數(shù)。
通過【添加變量】添加mobile和password兩個變量,通過【添加用戶】添加3組數(shù)據(jù):

在HTTP請求中引用參數(shù)化的數(shù)據(jù):

運行腳本,設置好的數(shù)據(jù)被成功引用。

這種方式相對來說簡易一些,數(shù)據(jù)范圍有限,適用場景也少。而且,每個線程會一直使用一組數(shù)據(jù)。例如,設置4個線程并發(fā),那么線程1使用用戶_1的數(shù)據(jù),線程2使用用戶_2的數(shù)據(jù),線程3使用用戶_3的數(shù)據(jù),線程4使用用戶_1的數(shù)據(jù),無論各個線程循環(huán)多少次。

2.3 用戶定義的變量
用戶自定義的變量,也可以實現(xiàn)請求參數(shù)的參數(shù)化。
創(chuàng)建方式:線程組上右鍵–>配置元件(config element)–>用戶定義的變量。

如上圖,用起來也很簡單,添加變量名和相對應的值就可以了。后面引用變量和前面一樣,使用${mobile}的方式。
【用戶定義的變量】一般并非用來做HTTP請求參數(shù)化,而是用來定義全局變量,比如參數(shù)化文件路徑、host、url等。
【用戶定義的變量】創(chuàng)建在【線程組】上,則在線程組內生效,如果創(chuàng)建在【Test Plan】上,則對所有線程組生效。
2.4 Random
函數(shù)助手中的Random函數(shù),
創(chuàng)建方式:Tools–>函數(shù)助手對話框–>選擇一個功能–>_Random:

上圖中,生成了一個表達式:${__Random(8000,9000,)},我們用這個表達式替換想要參數(shù)化的變量值,例如下圖中的price變量:

運行腳本,察看結果樹,可以看到效果:

這種方式適用于值在一定區(qū)間無規(guī)律隨機取值的變量參數(shù)化,例如價格、數(shù)量等,并不適用于有較強規(guī)則的變量進行參數(shù)化,例如手機號。
到此這篇關于JMeter參數(shù)化4種實現(xiàn)方式(小結)的文章就介紹到這了,更多相關JMeter參數(shù)化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中用POI實現(xiàn)將數(shù)據(jù)導出到Excel
這篇文章主要介紹了Java中用POI實現(xiàn)將數(shù)據(jù)導出到Excel,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
JSON反序列化Long變Integer或Double的問題及解決
這篇文章主要介紹了JSON反序列化Long變Integer或Double的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
springboot配置文件中使用${}注入值的兩種方式小結
這篇文章主要介紹了springboot配置文件中使用${}注入值的兩種方式小結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
使用Mybatis對數(shù)據(jù)庫進行單表操作的實現(xiàn)示例
這篇文章主要介紹了使用Mybatis對數(shù)據(jù)庫進行單表操作的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08

