JMeter參數化是指把固定的數據動態化,這樣更貼合實際的模擬用戶請求,比如模擬多個不同賬號。JMeter一共有四種參數化方式,分別是:
- CSV Data Set Config
- Function Helper
- User Defined Variables
- User Parameters
CSV Data Set Config
所屬組件:Config Element。

Name
帶業務含義的名字。
Comments
可以為空的注釋。
Configure the CSV Data Source
【Filename】文件名,可以是相對路徑也可以是絕對路徑。推薦使用相對路徑,好處是腳本遷移或者分發到多台遠程負載機,不改腳本就能直接復用。相對路徑的根節點是%JMETER_HOME%\bin,把CSV文件放到這個目錄或其子目錄下。
注意,打開方式選擇bin目錄下jmeter.bat或快捷方式才會把bin作為相對路徑的根節點。如果把bin目錄加入系統環境變量后,用cmd執行jmeter命令打開,那么相對路徑的根節點是cmd的工作目錄,比如C:\Users\dongfanger\Desktop。
【File encoding】文件編碼,推薦用UTF-8。
【Variable Names (comma-delimited)】定義的變量名,用逗號隔開,與CSV文件的列一一對應。變量比列多,多余的變量取不到值;變量比列少,多余的列不會被取值。此選項可以為空。
【Ignore first line (only used if Variable Names is not empty)】上一個選項的變量名為空時,此選項生效。它會把CSV文件的第一行的列名作為變量名,並在取值時忽略第一行。
【Delimiter (use '\t' for tab)】CSV文件分隔符,默認為逗號,也可以用制表符。
【Allow quoted data】是否允許引用數據,比如雙引號"dongfanger,pass",1111,允許后能拆分出dongfanger,pass和1111。
【Recycle on EOF】設置為True時,循環遍歷CSV文件。
【Stop thread on EOF】設置為True時,遍歷完CSV文件就結束線程。
EOF是End Of File縮寫,文件結束符。JMeter在測試執行過程中每個線程每次迭代會從參數文件中新取一行數據,從頭遍歷到尾。
【Sharing mode】有三種共享模式:默認為All threads,對所有線程共享;Current thread group只對當前線程組中的線程共享;Current thread僅當前線程獲取。
比如2個線程組,每個線程組2個線程,共享同一個csv文件,那么迭代1次這4個線程會分別取前4條數據,互不重復;迭代2次這4個線程會分別取前8條數據,互不重復。
User Defined Variables
所屬組件:Config Element。

JMeter有兩個User Defined Variables,它們的區別是:Test Plan的User Defined Variables作用域是全局的,配置元件的User Defined Variables作用域可以是全局的也可以是局部的。
表格共三列,第一列是Name變量名,第二列是Value變量值,第三列是Description描述。表格下方的功能按鈕,用來對表格進行增刪改查和上下移動,還能直接從剪貼板添加。
定義好的變量通過${}格式來使用,比如變量a值為1,使用時寫作${a}。這個地方定義的實際上是字符串常量,比如剛才已經定義了一個變量名a變量值1,再定義變量名b變量值${a} + 1,b的實際值不是整型2而是字符串"${a} + 1"。
User Parameters
所屬組件:Pre Processors。由於User Parameters屬於前置處理器,所以它只會對當前Sampler生效。

Name
帶業務含義的名字。
Comments
可以為空的注釋。
Update Once Per Iteration
經過反復多次試驗,勾選與否沒看出區別。官方解釋如下:
A flag to indicate whether the User Parameters element should update its variables only once per iteration. if you embed functions into the UP, then you may need greater control over how often the values of the variables are updated. Keep this box checked to ensure the values are updated each time through the UP's parent controller. Uncheck the box, and the UP will update the parameters for every sample request made within its scope.
從各文章截圖總結,一般會勾選上這個選項。
Parameters
表格列Name指變量名,表格列User_x指某個用戶的變量值。下方有6個按鈕,分別是“添加變量”、“刪除變量”、“添加用戶”、“刪除用戶”、“上移”、“下移”。每個線程分配一個變量值;如果線程數大於User_x,那么會循環取值。
User Parameters在參數較少的情況下使用。
Function Helper

函數除了參數化,還可以用來做運算,字符編碼格式轉換,獲取運行時參數等,下篇文章專門來寫。
小結
本文介紹了配置組件里面的CSV Data Set Config和User Defined Variables,作用域可全局可局部。接着介紹了前置處理器User Parameters,只對當前Sampler生效。但都有局限性,為了幫助我們更好地進行參數化,JMeter提供了一組函數來幫我們生成需要的數據,這些函數在有個地方能夠進行編輯,它就是:Function Helper。
參考資料:
《全棧性能測試修煉寶典JMeter實戰》
http://tutorialjmeter.blogspot.com/2017/05/pre-processor-in-jmeter.html
https://jmeter.apache.org/usermanual/component_reference.html#User_Parameters
