JMeter參數(shù)化4種實現(xiàn)方式(小結(jié))
1 參數(shù)化釋義
什么是參數(shù)化?從字面上去理解的話,就是事先準(zhǔn)備好數(shù)據(jù)(廣義上來說,可以是具體的數(shù)據(jù)值,也可以是數(shù)據(jù)生成規(guī)則),而非在腳本中寫死,腳本執(zhí)行時從準(zhǔn)備好的數(shù)據(jù)中取值。
參數(shù)化:是自動化測試腳本的一種常用技巧,可將腳本中的某些輸入使用參數(shù)來代替,如登錄時利用GET/POST請求方式傳遞參數(shù)的場景,在腳本運(yùn)行時指定參數(shù)的取值范圍和規(guī)則。
腳本在運(yùn)行時,根據(jù)需要選取不同的參數(shù)值作為輸入,該方式稱為數(shù)據(jù)驅(qū)動測試(Data Driven Test),而參數(shù)的取值范圍被稱為數(shù)據(jù)池(Data Pool)。
JMeter提供了多種參數(shù)化方式,下面就其中常用的4種展開闡述。
方式 | 適用場景 |
---|---|
CSV Data Set Config | 我們通常所指的參數(shù)化。數(shù)據(jù)存儲在文件中,參數(shù)化取值范圍大,靈活性強(qiáng) |
User Parameter | 適用于參數(shù)取值范圍很小時 |
函數(shù)助手 | _Random等函數(shù),生成隨機(jī)數(shù)字和隨機(jī)字符串實現(xiàn)參數(shù)化 |
User Defined Variables | 用戶自定義變量,更多用于設(shè)置全局變量 |
2 參數(shù)化實現(xiàn)
2.1 CSV Data Set Config
在JMeter中提起參數(shù)化,我們默認(rèn)就想到CSV Data Set Config(以下簡稱CSV),CSV能夠讀取文件中的數(shù)據(jù)并生成變量,被JMeter腳本引用,從而實現(xiàn)參數(shù)化。下面我們來詳細(xì)探究一下。
CSV簡介
線程組右鍵–>添加–>配置元件–>CSV Data Set Config,就創(chuàng)建了一個CSV,界面是這個樣子的:
各項參數(shù)詳解如下:
參 數(shù) | 描 述 | 必 須 |
---|---|---|
Name | 腳本中顯示的這個元件的描述性名稱 | 是 |
Filename | 文件名。待讀取文件的名稱??梢詫懭虢^對路徑,也可以寫入相對路徑(相對于bin目錄),如果直接寫文件名,則該文件要放在bin目錄中。對于分布式測試,主機(jī)和遠(yuǎn)程機(jī)中相應(yīng)目錄下應(yīng)該有相同的CSV文件 | 是 |
File Encoding | 文件編碼。文件讀取時的編碼格式,不填則使用操作系統(tǒng)的編碼格式 | 否 |
Variable Names | 變量名稱。多個變量名之間必須用分隔符分隔。如果該項為空,則文件首行會被讀取并解析為列名列表 | 否 |
Ignore first line | 是否忽略首行?如果csv文件中沒有表頭,則選擇false | 是 |
Delimiter | 分隔符。將一行數(shù)據(jù)分隔成多個變量,默認(rèn)為逗號,也可以使用“\t”。如果一行數(shù)據(jù)分隔后的值比Vairable Names中定義的變量少,這些變量將保留以前的值(如果有值的話) | 是 |
Allow quoted data? | 是否允許變量使用雙引號?允許的話,變量將可以括在雙引號內(nèi),并且這些變量名可以包含分隔符 | 否 |
Recycle on EOF? | 遇到文件結(jié)束符是否再次循環(huán)?默認(rèn)為 true | 是 |
Stop thread on EOF? | 遇到文件結(jié)束符是否停止線程?默認(rèn)為 true | 是 |
Recycle on EOF? | 當(dāng)Recycle on EOF為False時,停止線程,當(dāng)Recycle on EOF為True時,此項無意義,默認(rèn)為 false | 是 |
Sharing mode | 線程共享模式。1、All threads(默認(rèn)):一個線程組內(nèi),各個線程(用戶)唯一順序取值;2、current thread:一個線程組內(nèi),各個線程(用戶)各自順序取值;3、線程組各自獨(dú)立,但每個線程組內(nèi)各個線程(用戶)唯一順序取值; | 是 |
需要著重說明一下的是Sharing mode
,也就是線程共享模式。線程共享模式,是指多個線程對文件數(shù)據(jù)取值順序模式,JMeter提供了3種模式:
All threads
:所有線程。如果腳本有多個線程組,在這種模式下,各線程組的所有線程也要依次唯一順序取值。例如,腳本有2個線程組,各有2個線程,文件內(nèi)有5行數(shù)據(jù),腳本運(yùn)行時,將如下圖一樣循環(huán)往復(fù)取值:
Current thread group
:當(dāng)前線程組。各個線程組之間隔離,線程組內(nèi)的線程順序唯一取值。
Current thread:當(dāng)前線程。這種模式下,每個線程獨(dú)立,順序唯一取值。
CSV實例
下面看一個實例。首先有userInfo.txt的文件,放置在bin目錄中,內(nèi)容如下:
- 文件名:文件在bin目錄中,使用相對目錄
- 變量名稱:兩列數(shù)據(jù)分別屬于mobile和password兩個變量
- 分隔符:以逗號分割
在HTTP請求中引用CSV生成的變量的方式是${變量名}
的方式:
運(yùn)行腳本,察看結(jié)果樹:
可以看到,文件中的數(shù)據(jù)被腳本成功引用。JMeter使用CSV實現(xiàn)參數(shù)化就是這么簡單。
注意事項
CSV使用中最常見的一個問題是文件路徑不對。當(dāng)遇到這種問題時,因為運(yùn)行腳本沒有明顯提示,許多人遇到后會感覺很懵,不知道問題在哪。其實,仔細(xì)觀察會發(fā)現(xiàn)右上角黃色三角處數(shù)字在增加,點(diǎn)擊該區(qū)域便打開了日志,日志里記錄了相應(yīng)錯誤:File userInfo2.txt must exist and be readable
,也就是提示參數(shù)化文件不存在或路徑不可達(dá)。
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ù):
運(yùn)行腳本,設(shè)置好的數(shù)據(jù)被成功引用。
這種方式相對來說簡易一些,數(shù)據(jù)范圍有限,適用場景也少。而且,每個線程會一直使用一組數(shù)據(jù)。例如,設(shè)置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)–>用戶定義的變量。
如上圖,用起來也很簡單,添加變量名和相對應(yīng)的值就可以了。后面引用變量和前面一樣,使用${mobile}
的方式。
【用戶定義的變量】一般并非用來做HTTP請求參數(shù)化,而是用來定義全局變量,比如參數(shù)化文件路徑、host、url等。
【用戶定義的變量】創(chuàng)建在【線程組】上,則在線程組內(nèi)生效,如果創(chuàng)建在【Test Plan】上,則對所有線程組生效。
2.4 Random
函數(shù)助手中的Random函數(shù),
創(chuàng)建方式:Tools–>函數(shù)助手對話框–>選擇一個功能–>_Random:
上圖中,生成了一個表達(dá)式:${__Random(8000,9000,)}
,我們用這個表達(dá)式替換想要參數(shù)化的變量值,例如下圖中的price變量:
運(yùn)行腳本,察看結(jié)果樹,可以看到效果:
這種方式適用于值在一定區(qū)間無規(guī)律隨機(jī)取值的變量參數(shù)化,例如價格、數(shù)量等,并不適用于有較強(qiáng)規(guī)則的變量進(jìn)行參數(shù)化,例如手機(jī)號。
到此這篇關(guān)于JMeter參數(shù)化4種實現(xiàn)方式(小結(jié))的文章就介紹到這了,更多相關(guān)JMeter參數(shù)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Character.UnicodeBlock中cjk的說明詳解
這篇文章主要為大家詳細(xì)介紹了Character.UnicodeBlock中cjk的說明,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09一文詳解各種ElasticSearch查詢在Java中的實現(xiàn)
Elasticsearch是用Java開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是當(dāng)前流行的企業(yè)級搜索引擎,下面這篇文章主要給大家介紹了關(guān)于各種ElasticSearch查詢在Java中實現(xiàn)的相關(guān)資料,需要的朋友可以參考下2023-11-11java 漢諾塔Hanoi遞歸、非遞歸(仿系統(tǒng)遞歸)和非遞歸規(guī)律 實現(xiàn)代碼
漢諾塔(Hanoi) 算法Java實現(xiàn)。通過三個函數(shù),分別對Hanoi進(jìn)行遞歸、非遞歸和非遞歸規(guī)律實現(xiàn)。2013-05-05Java8函數(shù)式接口的基礎(chǔ)學(xué)習(xí)教程
這篇文章主要給大家介紹了關(guān)于Java8函數(shù)式接口基礎(chǔ)學(xué)習(xí)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04IDEA報錯:Unable to save settings Failed to save settings
這篇文章主要介紹了IDEA報錯:Unable to save settings Failed to save settings的相關(guān)知識,本文給大家分享問題原因及解決方案,需要的朋友可以參考下2020-09-09