1. 程式人生 > >Jmeter 引數化

Jmeter 引數化

引數化是自動化測試指令碼的一種常用技巧。簡單來說,引數化的一般用法就是將指令碼中的某些輸入使用引數來代替,在指令碼執行時指定引數的取值範圍和規則;

這樣,指令碼在執行時就可以根據需要選取不同的引數值作為輸入。這種方式通常被稱為資料驅動測試(Data Driven Test),引數的取值範圍被稱為資料池(Data Pool)。

jmeter的test plan中,支援如下4種引數化方式

函式助手:_CSVRead

CSV Data Set Config:CSV資料控制元件

User Defined Variables:使用者定義的變數

User Variables:使用者引數

首先新建一個測試指令碼,可以通過工具(badboy)錄製或者自己手動編寫

登入請求的介面如下:

這裡我們對登入的使用者名稱密碼進行引數化,將使用者名稱密碼寫入txt文件,儲存為.dat格式,編碼型別選擇UTF-8

因為配置元件——CSV Data Set Config對引數化的格式要求比較嚴格,使用者名稱密碼一一對應,之間用半形英文逗號隔開

然後將儲存的.dat檔案放入計算機的某個盤裡,這裡我放入路徑為:F:\jmeter\csvtest.dat

下面具體介紹引數化常用的的兩種方法:

一、函式助手:_CSVRead

點選jmeter的介面,功能欄選項→ 函式助手對話方塊→ _CSVRead

CSV file to get values from | *alias:CSV檔案取值路徑,即這裡需要寫入之前的需要引數化的引數的檔案路徑

CSV檔案列號| next|*alias:檔案起始列號:CSV檔案列號是從0開始的,第一列為0,第二列為1,以此類推。。。

函式字串:即生成的引數化後的引數,可以直接在登陸請求中的引數中引用,第一列為使用者名稱,函式欄位號為0,第二列為密碼,函式欄位號為1,以此類推進行修改使用即可

替換引數化後的引數,然後修改執行緒數,執行指令碼,通過監聽器裡結果樹的請求內容,可以看到請求的引數都是引數化後的資料

二、配置元件——CSV Data Set Config

點選執行緒組新增配置元件→ CSV Data Set Config:

說明:

Filename:F:\jmeter\csvtest.dat檔名,儲存引數化資料的檔案目錄,可選擇相對或者絕對路徑(建議填寫相對路徑,避免指令碼遷移時需要修改路徑);

File encoding:UTF-8,F:\jmeter\csvtest.dat檔案的編碼格式,在儲存時儲存編碼格式為UTF-8即可;

Variable Names(comma-delimited):對對應引數檔案每列的變數名,類似excel檔案的檔案頭,起到標示作用,同時也是後續引用的識別符號,建議採用有意義的英文標示;

                                (如:有幾列引數,在這裡面就寫幾個引數名稱,每個名稱中間用分隔符分割,這裡的 user,pwd,可以被利用變數名來引用:user,{pwd};

Delimitet:引數檔案分隔符,用來在“Variable Names”中分隔引數,與引數檔案中的分隔符保持一致即可;

Allow quote data:是否允許引用資料,預設false,選項選為“true”的時候對全形字元的處理出現亂碼 ;

Recycle on EOF?:是否迴圈讀取引數檔案內容;因為CSV Data Set Config一次讀入一行,分割後存入若干變數中交給一個執行緒,如果執行緒數超過文字的記錄行數,那麼可以選擇從頭再次讀入;

△ Ture:為true時,當已讀取完引數檔案內的測試用例資料,還需繼續獲取用例資料時,此時會迴圈讀取引數檔案資料(即:讀取檔案到結尾時,再重頭讀取檔案);

False:為false時,若已至檔案末尾,則不再繼續讀取測試資料;通常在“執行緒組執行緒數* 執行緒組迴圈次數>引數檔案行數”時,選用false(即:讀取檔案到結尾時,停止讀取檔案);

Stop thread on EOF?:當Recycle on EOF為False時(讀取檔案到結尾),停止程序,當Recycle on EOF為True時,此項無意義;

若為ture,則在讀取到引數檔案行末尾時,終止引數檔案讀取執行緒;

若為false,此時執行緒繼續讀取,但會請求錯誤,因此時讀取的資料為EOF;

Sharing mode:共享模式,即引數檔案的作用域,有以下幾種方式:

All threads:當前測試計劃中的所有執行緒中的所有的執行緒都有效,預設;

Current thread group:當前執行緒組中的執行緒有效;

Current thread:當前執行緒有效;

完成之後,將剛才生成的引數寫入引數對應的值裡面:

以上兩種常見的引數化的方法,推薦使用CSV控制元件方法(因為函式助手引數化功能相比其較弱)

三、配置元件——User Defined Variables

點選執行緒組新增配置元件→ User Defined Variables(使用者定義的變數):

如上圖所示,在該引數組中已經定義了兩個引數,通過介面下方的新增、刪除按鈕可以向引數列表增加和刪除引數,Up和Down可以上下移動引數的位置;

PS:User Defined Variables中定義的引數值在test plan執行過程中不能發生取值的改變,因此一般僅將test plan中不需要隨迭代發生改變的引數(只取一次的引數)

    設定在此處;例如:被測應用的host和port值。

四、前置處理器——User Variables

點選執行緒組新增前置處理器——User Variables(使用者引數):

如上圖所示,在該引數組中已經設定了兩個引數,username和password分別有2組不同的取值,通過頁面下方的四個按鈕,可以增加刪除引數的可能取值。

PS:User Variables中設定的引數可以在test plan執行過程中發生變化。

以上就是jmeter引數化的四種方式,其中:

1、函式助手_CSVRead的引數化功能相比CSV Data Set Config較弱;

2、CSV Data Set Config適用於引數取值範圍較大的時候使用,該方法具有更大的靈活性;

3、User Defined Variables一般用於test plan中不需要隨請求迭代的引數設定;

4、User Variables適用於引數取值範圍很小的時候使用;

PS:相比於loadrunner來說,jmeter引數化有以下不同:

1.jmeter引數檔案第一行沒有列名稱

2.引數檔案的編碼,儘量儲存為UTF-8(編碼問題在使用CSV Data Set Config引數化時要求的比較嚴格)

3.Jmeter的引數化沒有LoadRunner做的出色,它是依賴於執行緒設定的(只有CSV Data Set Config引數化方法才有