『動善時』JMeter基礎 — 22、JMeter中實現參數化(CSV)

1、參數化的定義

參數化是自動化測試腳本的一種常用技巧,可將腳本中的某些參數使用變數來代替。例如登錄操作時,利用GET/POST請求方式傳遞參數的場景,可在腳本運行時指定參數的取值範圍和規則。

腳本在運行時,根據需要選取不同的參數值作為輸入,該方式稱為數據驅動測試(Data Driven Test),而參數的取值範圍被稱為數據池(Data Pool)。

2、什麼情況下需要用到參數化

測試數據的準備階段我們需要用到參數化。

使用場景

  1. 若需求每次訪問某一個介面的數據不一樣時,需要用到參數化,更好地模擬用戶情況,常用於壓力測試。
  2. 需要多次獲取同一數據 ,則可以用一個參數化來代替,在需要的地方使用這一個變數就可以了。

3、JMeter實現參數化的方式

JMeter提供了多種參數化方式,常用的4種方式如下:

  1. CSV數據文件設置(CSV Data Set Config):這種方式是通常所指的參數化。數據存儲在文件中,該種參數化方式取值範圍大,靈活性強,適用於大量測試數據時的使用。
  2. 用戶參數(User Parameter):適用於參數取值範圍很小,需要少量測試數據時使用。
  3. 用戶自定義變數(User Defined Variables):更多用於設置全局變數,常用於資料庫地址,測試環境、開發環境地址等常量配置。
  4. 函數助手:可使用函數生成隨機數字和隨機字元串實現參數化。

在JMeter中使用參數化變數的方式:${變數名}

4、CSV數據文件設置介面詳細說明

CSV數據文件設置(CSV Data Set Config)是一個配置元件(Config Element),用來提供對靜態數據配置的支援,可以為取樣器提供需要的變數。

CSV數據文件設置組件,在它所在層級的元件中是第一個執行。即在最開始被執行,在相同範圍內的任何取樣器之前執行。

CSV數據文件設置組件能夠在文件中讀取一行數據,根據特定的符號,切割成一個或多個變數放入記憶體中。相比於JMeter函數助手中提供的 __CSVRead()__StringFromFile()等函數,CSV數據文件設置組件使用更加簡便。

JMeter支援數據被雙引號括起,被雙引號括起的數據允許包含分隔符,例如:a,b,"c,d"。這行數據被逗號分隔後將產生三個變數值:abc,d

JMeter支援讀取具有標題行(標題行內容如Excel的列名稱)的CSV文件。

(1)CSV數據文件設置組件介面說明

添加CSV數據文件設置組件的操作:選中「執行緒組」右鍵 —> 添加 —> 配置元件 —> CSV數據文件設置

CSV數據文件設置組件介面如下:

image

參數詳解:

  • 名稱(Name ):腳本中顯示的該元件的描述性名稱,必須填寫。
  • 注釋(Comments):對該元件的說明資訊。(非必填寫)
  • 文件名(Filename ):待讀取文件的名稱。可以寫入絕對路徑,也可以寫入相對路徑(相對於bin目錄或者腳本文件所在目錄),如果直接寫文件名,則該文件一定要放在bin目錄中。對於分散式測試,主機和遠程機中相應目錄下應該有相同的CSV文件,必須填寫。(建議填寫相對路徑,避免腳本遷移時需要修改路徑)
  • 文件編碼(File Encoding):文件讀取時的編碼格式,不填則使用作業系統的編碼格式。(非必填寫,下拉菜單可選,一般情況下選擇UTF-8即可)
  • 變里名稱(Variable Names):變數名列表。對應參數文件每列的變數名,類似Excel文件的文件頭,起到標示作用,同時也是後續引用的標識符,建議採用有意義的英文標示。
    例如:eid,name可以被用變數名來引用:${eid},${name}
    多個變數名之間必須用分隔符分隔。如果該項為空,則文件首行會被讀取並解析為列名。(非必填寫)
  • 忽略首行(Ignore first line):是否忽略首行,如果CSV文件中沒有表頭,則選擇False,必須填寫。
  • 分隔符(Delimiter):參數分隔符,將一行數據分隔成多個變數,默認為逗號,也可以使用\t。如果一行數據分隔後的所獲得的變數數,比Vairable Names中定義的變數少,這些變數將保留以前的值(如果有值的話),必須填寫。
  • 是否允許帶引號?(Allow quoted data?):是否允許變數使用雙引號,允許的話,變數將可以括在雙引號內,並且這些變數名可以包含分隔符。(非必填寫)
  • 遇到文件結束符再次循環?(Recycle on EOF?):是否循環讀取CSV文件內容,默認為 True,必須填寫。
    因為CSV Data Set Config組件一次讀入一行,分割後存入若干變數中交給一個執行緒組,如果執行緒數超過文本的記錄行數,那麼可以選擇從頭再次讀入;
    1)為True時,當已讀取完參數文件內的測試用例數據,還需繼續獲取用例數據時,此時會循環讀取參數文件數據(即:讀取文件到結尾時,再重頭讀取文件);
    2)為False時,若已至文件末尾,則不再繼續讀取測試數據;通常在「執行緒組的執行緒數「或者」執行緒組的循環次數「>參數文件組數時,選用False(即:讀取文件到結尾時,停止讀取文件);
  • 遇到文件結束符停止執行緒?(Stop thread on EOF?):如果執行緒數超過了數據文件中的變數,是否停止,默認為 False。當Recycle on EOF為True時,此項無意義。
  • 執行緒共享模式(Sharing mode):共享模式,即參數文件的作用域。如果希望每個執行緒擁有自己獨立的值集合,那麼就需要創建一系列數據文件,為每個執行緒準備一個數據文件,如test1.csvtest2.csv等,使用文件的方式test${__threadNum}.csv,並將Sharing mode設置為Current thread
    1)所有執行緒All threads(默認):文件在所有執行緒間共享。即當前測試計劃中的所有執行緒組中的所有的執行緒都有效。
    2)當前執行緒組Current thread group:每個文件會針對每個執行緒組打開一次。即:對當前執行緒組中的執行緒有效。
    3)當前執行緒Current thread:每個文件會針對每個執行緒單獨打開。即:對當前執行緒有效。

(2)補充說明:Recycle on EOFStop thread on EOF的關係

Recycle on EOF?:遇到文件結束符再次循環?(相當於是否循環讀取文件中的每組數據)

Stop thread on EOF?:遇到文件結束符停止執行緒?(停止執行緒的時機,看下面)

解釋:

  • Recycle on EOF選擇True時,Stop thread on EOF選擇True和False無任何意義,因為既然前面已經設置了文件是不停的循環讀取,後面的控制停止執行緒就相當於失效;
  • Recycle on EOF選擇False時,Stop thread on EOF選擇True,則當執行緒數超過文件里的參數的個數時,實際請求數為參數的個數。如果執行緒數少於參數個數,則實際請求數以設置的執行緒數為準;(此狀態也是循環讀取文件中的數據)
  • Recycle on EOF選擇False時,Stop thread on EOF選擇Flase,當執行緒數超過文件里參數的個數時,實際請求次數為執行緒數,但當執行緒數超過參數次數時,由於沒有參數,所以結果仍然是失敗的。如果執行緒數少於參數個數,則實際請求數以設置的執行緒數為準。(此狀態也是循環讀取文件中的數據)

5、使用CSV數據文件設置組件實現參數化

示例:批量實現用戶的登陸操作。

(1)測試計劃內包含的元件

添加元件操作步驟

  1. 創建測試計劃。
  2. 創建執行緒組:選中「測試計劃」右鍵 —> 添加 —> 執行緒(用戶) —> 執行緒組
  3. 在測試計劃(也可以是執行緒組)裡面添加配置元件CSV Data Set Config組件:選中「執行緒組」右鍵 —> 添加 —> 配置元件 —> CSV 數據文件設置
  4. 在執行緒組裡面,添加取樣器「HTTP請求」組件:選中「執行緒組」右鍵 —> 添加 —> 取樣器 —> HTTP請求
  5. 在執行緒組裡面,添加監聽器「察看結果樹」組件:查看結果,選中「執行緒組」右鍵 —> 添加 —> 監聽器 —> 察看結果樹

最終測試計劃中的元件如下:

image

點擊運行按鈕,會提示你先保存該腳本,腳本保存完成後會直接自動運行該腳本。

(2)數據文件內容

先用Excel表格編輯所需的請求參數,內容如下:

image

我們需要把該文件保存為.csv格式。

然後使用Notepad++打開該文件,點擊「編碼」 —> 轉為UTF-8編碼,防止中文亂碼。

最終所得到的.csv格式文件的內容如下:

image

(3)執行緒組元件內容

如果需要使用CSV文件中所有的數據,需要設置執行緒組元件的執行緒數或循環次數。

因為在CSV數據文件設置組件中,有Recycle on EOFStop thread on EOF選項的關係,所以設置執行緒數和循環次數都可以實現,使用數據文件中的每一組數據進行測試。

image

(4)CSV數據文件設置組件內容

設置好的CSV數據文件設置組件介面如下:

image

我一般常用操作,簡單說明:

  • 文件名:就直接瀏覽選擇文件即可,也就是使用數據文件的絕對路徑。
  • 文件編碼選擇UTF-8
  • 變數名稱:就是把數據文件的每個變數名都填寫上,中間用逗號分割。
  • 忽略首行:選擇True,如果CSV文件中首行寫的是變數名稱,選擇忽略首行。
  • 分隔符:如果CSV文件中的數據,使用的是逗號隔開,就默是默認值。如果是製表符,就用\t表示。
  • 是否允許帶引號?:如果變數值中有引號就選擇True,沒有則默認False即可。
  • 其他一般默認選擇。如果需求看上面說明中寫的很詳細,按工作中實際情況選擇。

(5)HTTP請求組件內容

編輯登錄介面內容,如下圖所示:

在JMeter中使用參數化變數的格式:${變數名}

image

(6)腳本運行結果

該測試腳本運行結果如下圖所示:

image

我們可以看到數據文件中的每個用戶都進行了登陸操作。

以上就完成了在JMeter中使用「CSV數據文件設置」組件實現參數化的示例。

參考://blog.csdn.net/mu_wind/article/details/92796646