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

繁華似錦Fighting發表於2021-05-26

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資料檔案設定”元件實現引數化的示例。

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

相關文章