前言

前一篇我們簡單介紹 JMeter 操作作方式與設定一個腳本測試 ASP.NET Core 範例網站。在這一篇,要介紹幾個簡單卻在撰寫腳本過程中非常重要的元素 - Function, User Defined Variables, User ParametersProperties。如同寫程式方式,可以設定使用者變數提供後續測試工作(如 Http Request, Header, PreProcessor, 與PostProcessor)..等使用,理所當然,這些變數可以傳遞參數但也受到 scope 與 thread 影響。此外,在撰寫/修改腳本期間,使用這些自訂的變數,可以讓您不需要進入各個測試行為內一個一個修改,並增加腳本可讀性,相當實用。本篇文章若有任何錯誤或建議,請各位先進不吝指導,謝謝。


介紹

Function
JMeter 定義一些變數方便我們使用,個人常用到像是:
1. threadNum : 取得目前 thread 編號
2. machineIP : 取得本地執行機器 IP address
3. machineName : 取得本地執行機器名稱
4. time: 取得時間

而使用方法非常的簡單,無論在測試工作或者BeanShell,只需要${__RefName}即可使用:
${__threadNum}
${__machineIP}
其他變數請參考: http://jmeter.apache.org/usermanual/functions.html#functions





User Defined Variables 
具有下列特性
1. 靜態 (Static):設定後不能變更。
2. 隸屬於相關自身的 thread:不能跨 thread 分享資料,不同 thread 中 User Defined Variables 可能會有不同的資料
3. 增加可讀性:可以設定 IP、Host、Port...等起始參數設定,增加腳本可讀性

設定方法:
Step 1. 右鍵點選測試計畫 > 新增 > 設定元素 > 使用者自訂變數


Step 2. 點選新增(Add) > 輸入名稱(Name)與值(Value) > 儲存(Save)


Step 3. 使用方法為:
${Ref_Name}


BeanShell 使用方法:
vars.put("Ref_Name","Value");
vars.get("Ref_Name");





User Parameters
另一個可以設定為使用者參數(User Parameters),他能夠對於每一個使用者(thread)進行設定不同的值,若使用者數量超過設定數量,則會重複使用。每回合變更一次(Update Once Per Iteration) 則可以確保每一回合所取用的值是相同的,不受到Scope影響。使用方法一樣是:
${Ref_Name}

Step 1.右鍵點選欲增加前置處理器的工作項目 > 前置處理器 > 使用者參數


Step 2. 您能透過 新增參數 新增使用者 客製使用者參數,我們增加useage參數,使用者分別為1,2,3,4。


Step 3.我們來寫個測試案例,我們將執行序群組(thread group)內執行序數量(thread number)設定10;並且新增 > 取樣 > BeanShell 取樣,加上下列程式碼:
print("UserAge=" + ${userage});



Step 4. 執行腳本,即可看見值情況。






Properties
用來定義於檔案中的設定,不會因為 thread 不同影響,對於每一個thread 設定皆為相同值。在某些情境下,我們可以透過 Properties 來撰寫我們的腳本。一般使用方法為:
儲存:
${__setProperty(name,value)} 
取出
${__property(propertyName)} 
${__P(propertyName)}

BeanShell 內使用方法
props.put("user", user); 
props.get("user"); 




上一篇:JMeter Introduction 介紹與基本操作
目錄:請點我
下一篇:JMeter Wait, Loop, and Random 等待、迴圈與隨機數


參考資料