(十三)參數化(File Parameter Types)

詳情:Vugen User Guide > VuGen > Working with VuGen > Parameters > Parameter Types

在data file中,數據以表格形式存儲,一個文件中可以有多個列,以逗號隔開

id,first_name
120,John
121,Bill
122,Tom

一、將每個參數值寫在單獨文件中操作步驟:

  • 錄製腳本
  • 在要參數化的文本處選中,然後右鍵選擇”Replace with a Parameter”
  • 添加參數化的數據,在工具欄”Open Parameter List”中,進行設置.Add Column、Add Row、Edit with Notepad、File format中可以選擇用回放用哪行的數據。
    列表內容

一個參數化的內容可以在多個地方使用,選擇要參數化內容—右擊選擇”Use Existing Parameter”

參數池中有的數據:

userName
jojo
qq
-------------
pwd
bean
1

在Parameter List中設置 File format爲:First data=1
Action中是登錄腳本,迭代次數爲2
這樣就能讓兩次迭代的用戶名、密碼不同。

二、將每個參數值寫在相同文件中操作步驟:

  • 將要參數化的數據寫在一個文本文檔中,爲了方便以後這個文件容易找到,最好寫在與第一種方式錄製的相同目錄下。userDat.dat
userName,pwd
jojo,bean
qq,1
  • 錄製腳本
  • 在要參數化的文本處選中,然後右鍵選擇”Replace with a Parameter”
  • File:在Browse中選擇userDat.dat
  • Select column中 有兩種方式選擇參數列
    ①By number:username爲第一列
    ②By name:根據名稱選擇列。

其餘的操作與一同

  • 開啓Run-time Settings中的Log—>extended log—>Parameter substitution。在回放中可以看到參數替代log
Action.c(22): Notify: Parameter Substitution: parameter "userName" =  "jojo"
Action.c(22): Notify: Parameter Substitution: parameter "pwd" =  "bean"

三、參數池的策略
①select next row:[how]
Vugen User Guide > VuGen > Working with VuGen > Parameters > Data Assignment Methods for File/Table/XML Parameters

  • sequential:Assigns data to a Vuser sequentially
    每個Vu都是從第一行開始,順序的向下取值
    特點:每個VU取值序列相同
    若數據不夠,則再從第一行讀取,直到結束
  • unique:Assigns a unique sequential value to the parameter for each Vuser.(每個用戶要唯一的向下取值,第一個用戶從第一行開始取)
    比如:20個虛擬用戶,5次迭代,則至少要準備100個唯一的值。
    若沒有數據可取,則根據When out of values:Continue with last value 、Abort Vuser、Continue in a cyclic manner策略繼續執行。
  • random:所有VU隨機取值
  • 有時,可能多個參數化對應的取值設置的 策略相同,則可以在”Select next row”選擇”Same line as xxx”,
  • 單用戶時,順序和唯一相同。

②update value on:[when]

  • 每次迭代(each iteration):每次迭代(循環、action的循環)
  • 每次遇到:當腳本執行過程遇到該參數(比如name)即更新這個參數。
    舉例:如果腳本的action中password參數出現兩次,那麼在腳本循環一次中,遇到該參數2次。循環n次,則遇到該參數2n次,即更新2n次(在參數表中取2n次數據)
    實際場景不多,實際應用較少
  • 一次(once):腳本執行過程中,只去一次。(不更新值)
    Updates the parameter value only once during the scenario run. The Vuser uses the same parameter value for all occurrences and all iterations of the parameter. This type may be useful when working with dates and times.(一個虛擬用戶在整個)
    【控制檯查看日誌的方式:
    ①要進行的設置:控制檯中run-time setting–>Log–>Always send messages (現在要通過日誌查看參數化後不同的取值方式、取值時間迭代過程中,參數取值問題,所以要選總髮送日誌,只爲學習目的。在實際的場景測試中,選擇出錯發送日誌即可)
    ②日誌位置:在腳本文件夾下的mdrvxxx.xxx.log中】
    這裏寫圖片描述
    這裏寫圖片描述
    這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

有些人會問:每次循環時更新和每次發生更新有區別嗎?答案是肯定的。
假設在腳本中,一個參數需要在多個地方進行參數化。那麼當回放腳本時,參數的更新策略爲Each iteration,腳本中每個被參數化的地方取值是一樣的,而當更新策略爲Each occurrence時,腳本中每出現一個參數化的地方,都會取下一條數據。具體取的值是什麼,可以用lr_output_message輸出看一下。

當Select next row爲unique時,存在分塊和when out of values情況,其他的random、sequential的不用考慮這些(他們都有自己的策略,不會出現數據不夠用情況)。
一、分塊方法(若要理解分塊,就先不要管塊內數據不夠怎麼辦?塊內數據不夠是when out of values需要解決的問題):

  • 自動分塊
    按照循環次數先分配第一個VU(例如設置的循環次數爲3,則分配給第一個VU 3個參數值),然後將接下來的3個參數值分配給第二個VU,依次類推…..
    這裏寫圖片描述
    可以看出分配給Vuser N的塊,已經不夠4塊,則此時將剩下的都給Vuser N即可。Vuser n+1沒有可用的了
  • 手動分塊
    這裏寫圖片描述

爲何要分塊?
在控制檯中,避免多用戶打架。讓每個VU都有自己的一塊,取值(unique方式)時只能在自己的塊中取值。
何時使用分塊?
取值方式爲unique。

當取值方式爲unique,更新方式爲each iteration,選擇自動分塊方式,則每個VU的塊大小設置爲迭代次數。

二、when out of values
這裏寫圖片描述

  • 當unique+each iteration時,可以選擇手動和自動。爲什麼可以自動?因爲自動的機制時按照迭代次數(是用戶設定好的),來設置塊大小的。
  • 當unique+each occurrence時,只能選擇手動。因爲each occurrence中用到參數個數,不能依據迭代次數來確定。
  • 當unique+once時,按照用戶數分別分配一個,分塊比較簡單,所以就不讓用戶選了。

有時需要輸出當前循環的次數,則可以定義一個變量(計數器)放在action函數上面,則這個值不會每次都初始化,而是保留上次的值

int i=1;
Action()
{
    lr_output_message("當前迭代次數爲:%d,用戶名爲:%s,密碼是:%s",
                      i++,
                      lr_eval_string("{name}"),
                      lr_eval_string("{password}"));
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章