我們在使用JMeter進行測試的時候,測試數據是一項重要的准備工作,當每次迭代的數據不一樣的時候,就需要進行參數化,也就是從參數化數據文件中來讀取測試數據。
JMeter中的參數化方式有多種,我們之前講過了使用CSV 數據文件設置組件,從.cvs
和.txt
文件中讀取數據。
今天我們來說一下,使用函數助手實現JMeter的參數化,其實方法很類似,只是調用數據的方式略有不同。
需求:我們以一個登陸接口為例。
發送登錄請求的時候,我們需要傳遞兩個參數:phone
和password
。
針對這個登錄接口設計5條用例,如下:
- 正常登錄。
- 手機號未注冊,即:手機號填寫錯誤。
- 手機號不合法,即:手機號填寫錯誤位數不對或為空。
- 手機號或密碼錯誤,即:密碼錯誤。
- 密碼不合法,即:密碼為空。
1、測試計划中的元件
添加元件操作步驟:
- 創建測試計划。
- 創建線程組:
選中“測試計划”右鍵 —> 添加 —> 線程(用戶) —> 線程組
。 - 在線程組里面,添加取樣器“HTTP請求”組件:
選中“線程組”右鍵 —> 添加 —> 取樣器 —> HTTP請求
。 - 在線程組里面,添加監聽器“察看結果樹”組件:查看結果,
選中“線程組”右鍵 —> 添加 —> 監聽器 —> 察看結果樹
。
最終測試計划中包含的元件如下:
點擊運行按鈕,會提示你先保存該腳本,腳本保存完成后會直接自動運行該腳本。
2、數據文件內容
創建一個.csv
文件,名為login_data.csv
,然后根據需求編輯數據文件內容。使用函數助手實現參數化的時候,我們不在數據文件的第一行添加列表明,這樣方便我們取值。
然后使用Notepad++
打開該文件,點擊“編碼” —> 轉為UTF-8編碼,防止中文亂碼。
最終所得到的.csv
格式文件的內容如下:
3、函數助手配置
(1)函數助手的打開方式
在JMeter中打開函數助手界面的方式有兩種:
第一種:選項 ——> 函數助手對話框
。
第二種:在工具欄中常用功能的快捷按鈕,如下圖:
(2)函數助手界面介紹
界面說明:
- 選擇一個功能:這里是選擇你要使用的函數。
- 函數參數:每個函數需要的函數參數都是不一樣的。
我們以__CSVRead
函數為例:
1)CSV file to get values from | *alias
:填寫數據文件路徑。
2)CSV文件列號| next| *
:標識在CSV文件中讀取第幾列中的數據,從0開始,第一列0、第二列1、第三列2,依次類推。 - 點擊生成按鈕,生成獲取參數值的函數表達式,可以在下方中看到生成的結果,生成的結果即為從數據文件中拿到的參數值。
Reset Variables
:重置變量。The result of the function is
:當我們文件路徑和參數值的列號填寫后、點擊“生成”按鈕,就會將讀取到的值顯示在這里。Current JMeter Variables
:當前的JMeter變量相關信息。
說明:
Current JMeter Variables
中的內容說明。(1)預定義變量
大多數變量都是通過函數調用和測試元件(如用戶自定義變量)來設置的,在這種情況下用戶擁有對變量名的完整控制權。
但是有些變量是JMeter內置的,例如:
JMeterThread.last_sample_ok
:最近的采樣是否可以(true/false)。(2)預定義變量屬性
JMeter屬性集是在JMeter啟動時通過系統屬性初始化的,還有其他補充的JMeter屬性來自於
jmeter.properties
、user.properties
或者命令行中。JMeter還另外定義了一些內置屬性,從方便的角度考慮,屬性START的值會被復制到同名變量中去。
下面是具體列表:
START.MS
:以毫秒為單位的JMeter啟動時間;START.YMD
:JMeter啟動日期格式yyyyMMdd
;START.HMS
:JMeter啟動時間格式HHmmss
;TESTSTART.MS
:以毫秒為單位的測試啟動時間;請注意:START變量/屬性表征的是JMeter啟動時間,而非測試的啟動時間,它們主要用於文件名之中。
(3)編輯后的函數助手界面
因為我們使用函數助手實現JMeter中的參數化,所以我們要使用__CSVRead
函數。
然后我們需要把數據文件的絕對路徑填入第一個輸入框中,在第二個輸入框選擇取第幾列的數據。
最后我們點擊“生成”按鈕,就會生成一個函數表達式。
如下圖所示:
提示幾點:
- 在
The result of the function is
的輸入框中要看到參數文件中的值,算是成功。 - 把生成函數字符串,復制到請求元件中需要參數化的地方。
- 文件數據中的每一列數據,都要生成一個函數字符串。(其實就是最后的列數不一樣)
4、HTTP請求組件內容
編輯HTTP請求組件中的內容,然后把需要使用參數化變量的地方,引用函數助手中生成的函數字符串表達式。
如下圖所示:
5、線程組元件內容
如果需要使用CSV文件中所有的數據,需要設置線程數。
因為沒有了CSV數據文件設置組件的參與,所以這里只能使用線程數進行設置,才能實現變量的循環應用。
如果使用循環次數進行設置,效果就是使用同一用戶,執行幾次登陸操作。
6、腳本運行結果
該測試腳本運行結果如下圖所示:
我們可以看到,一個發送了5次請求,每次請求使用的參數值都是不同的,並且返回結果的預期也與我們設想的一樣。
這樣就演示了,使用函數助手實現JMeter中的參數化。
7、總結JMeter函數助手使用步驟
- 點擊JMeter頁面的函數助手。
- 選擇需要使用的函數。
- 設置函數相關參數。
- 點擊生成可被引用的函數字符串。
- 復制函數字符串。
- 粘貼到需要使用的位置。