參數化的定義及使用場景
定義:將腳本中的特定值用變量替代,該變量值是變化的(注意:這個值是我們自己創建的,不是服務器返回的)。
參數化的原因,並不是網上說的真實模擬不同用戶,真實反應服務器性能,而是:
數據唯一性(比如注冊名不能一樣)
避免數據庫查詢緩存
思考:模擬1000個用戶登錄論壇,1000個相同的用戶名相同的密碼與1000個不同的用戶名不同的密碼的區別?
File參數類型--文本
File參數類型--文本參數顯示問題,參考:https://www.cnblogs.com/uncleyong/p/11725392.html
進行參數化前,我們要先把需要用到的參數設計好,這里以創建“File類型參數”為例
點擊下面的圖標
點擊左下角【New】
默認是File類型
點擊Create Table,默認生成一個NewParam.dat文件
單擊
編輯數據文件,第一行默認名稱是NewParam,重命名為具有含義的字段名,因為是用戶名,這里就改為name,最后一個參數下面最多只能一個空行
保存后
修改參數名稱為name
修改完成,注意:下面兩個name含義不一樣,第一個是在腳本中引用的變量名,第二個是為了方便我們識別列,取的列名
參數化替換舉例
參數設計好后,我們選擇要替換的常量,然后右鍵選擇使用已有的參數替換
對loadrunner自帶的訂票網站登錄的用戶名做參數化,上面已經將參數name創建好了
參數值更新方式(3x3)
參數更新方式總共3X3=9種方式
/* Sequential:順序,所有虛擬用戶按照順序讀取數據表(都從第一行開始); Random:隨機,所有虛擬用戶隨機形式讀取數據表; Unique:唯一,所有虛擬用戶每次各取一值(不重復); 什么時候訪問數據表完成數據更新? Each iteration:每次迭代以后; Each occurrence:每次出現參數; Once:每出現一個虛擬用戶; */
下面驗證這9種方式
3個參數值(a,b,c),迭代4次,看是如何取值的。
測試腳本為:
Action() { lr_output_message("第一個參數取值:%s",lr_eval_string("{paramtest}")); lr_output_message("第二個參數取值:%s",lr_eval_string("{paramtest}")); lr_output_message("第三個參數取值:%s",lr_eval_string("{paramtest}")); return 0; }
日志級別設置為標准
另外,運行的日志會存放到output.txt文件中,這個文件放到腳本目錄下
每次迭代
一次迭代過程中,相同參數值不發生變化,即只取一次值。每次迭代,是將所有的Action都執行。
每次迭代--順序
從頭開始按順序取值,當值不夠用時又從頭開始。
每次迭代--隨機
每次迭代--唯一
和每次迭代-順序類似,從頭開始按順序取值,當值不夠用時按照設置的方式處理。
此時可以自動分配,也可以自定義分配value數,(“每次發生--唯一”只能自定義分配value數)
當值不夠用時,有3種情況,默認情況下,使用最后一個值繼續;停止腳本;從頭再來(類似每次迭代,順序取值)
Error: Parameter 'paramtest': No more unique values for this parameter in table 'paramtest.dat' [unique range is 1-3].The parameter continues with last value of the range according to "When Out Of Values" policy.
默認自動分配
自定義分配,
運行結果依舊和上圖一樣,因為在vuser中,就只有一個vuser,單獨一個用戶分享所有參數值。
每次發生
每次發生,相同參數取不同值,也可以取相同值<隨機或者唯一不夠時>
每次發生--順序
和每次迭代-順序類似,從頭開始按順序取值,當值不夠用時又從頭開始。
每次發生--隨機
不一定從頭開始按順序取值,且值也可能相同。(無論參數多少)
每次發生--唯一
和每次迭代-順序、每次迭代-唯一類似,從頭開始按順序取值,當值不夠用時按照設置的方式處理。
此時自定義分配value數必填,(“每次迭代-唯一”可以自動分配,也可以自定義分配value數)
填入上面框中的數字無論為多少(1至X),在vuser中,運行結果都一樣。(在虛擬用戶腳本中只有一個用戶,無論Allocate處填多少都無用,單獨一個用戶分享所有參數值)
完整Error信息:Error: Parameter 'paramtest': No more unique values for this parameter in table 'paramtest.dat' [unique range is 1-3].The parameter continues with last value of the range according to "When Out Of Values" policy.
填1或者任意值,在vug中,都是如下結果:
一次
只取一個值。
一次--順序
只取第一個值。
始終第一個值
一次--隨機
隨機取一個值。
一次--唯一
只取第一個值。
(下面這種情況是沖突的,Unique是每個數據唯一,只使用一次,Once是只更新一次,但是只認Once,如果只有2個數據,迭代>2次,也不會報錯,全部是用第一個數據。)
始終第一個值
並發時,參數值更新方式(3x3)
【3個值(a,b,c),腳本中參數出現3次,選擇迭代4次,5個vuser】
Action() { lr_output_message("第一個參數取值:%s",lr_eval_string("{paramtest}")); lr_output_message("第二個參數取值:%s",lr_eval_string("{paramtest}")); lr_output_message("第三個參數取值:%s",lr_eval_string("{paramtest}")); return 0; } /* Sequential:順序,所有虛擬用戶按照順序讀取數據表(都從第一行開始); Random:隨機,所有虛擬用戶隨機形式讀取數據表; Unique:唯一,所有虛擬用戶每次各取一值(不重復); 什么時候訪問數據表完成數據更新? Each iteration:每次迭代以后; Each occurrence:每次出現參數; Once:每出現一個虛擬用戶; */
場景中,先設置一直發消息:
可以查看每個vuser的log:
每次迭代
每次迭代--順序
Vuser1:aaa→bbb→ccc→aaa
Vuser2:aaa→bbb→ccc→aaa
Vuser3:aaa→bbb→ccc→aaa
Vuser4:aaa→bbb→ccc→aaa
Vuser5:aaa→bbb→ccc→aaa
每次迭代--隨機
Vuser1:aaa→ccc→aaa→bbb
Vuser2:aaa→bbb→aaa→aaa
Vuser3:aaa→aaa→aaa→aaa
Vuser4:ccc→aaa→aaa→ccc
Vuser5:ccc→aaa→ccc→bbb
每次迭代--唯一
系統自動分配,三個參數,系統都分配給了第一個vuser,其余的vuser無參數而失敗,所以成功1個,失敗4個,成功的一個還報警,第四次迭代因為沒有值而用的最后一個值;
且C:\Users\wgy\AppData\Local\Temp\res3\log中只生成了一個log文件;
Insufficient records for parameter 'paramtest' in table to provide the Vuser with unique data
Error: Parameter 'paramtest': No more unique values for this parameter in table 'paramtest.dat' [unique range is 1-3].The parameter continues with last value of the range according to "When Out Of Values" policy.
Vuser1:aaa→bbb→ccc→ccc
手動分配,
如果設置為2,則生成2個log文件;
Vuser1:aaa→bbb→bbb→bbb
Vuser2:ccc→ccc→ccc→ccc
每次發生
每次發生--順序
Vuser1:abc→abc→abc→abc
Vuser2:abc→abc→abc→abc
Vuser3:abc→abc→abc→abc
Vuser4:abc→abc→abc→abc
Vuser5:abc→abc→abc→abc
每次發生--隨機
Vuser1:abc→cbc→cca→cba
Vuser2:bac→bbb→bca→abb
Vuser3:cbb→bba→abc→aab
Vuser4:abb→ccb→cca→bcc
Vuser5:cac→bbc→abc→cbc
每次發生--唯一
每個用戶分1個值,分給了3個用戶;2個用戶無值;
Vuser1:aaa→aaa→aaa→aaa
Vuser2:bbb→bbb→bbb→bbb
Vuser3:ccc→ccc→ccc→ccc
每個用戶分2個值,分給了2個用戶;3個用戶無值;
Vuser1:abb→bbb→bbb→bbb
Vuser2:ccc→ccc→ccc→ccc
一次
一次--順序
全取值a
Vuser1:aaa→aaa→aaa→aaa
Vuser2:aaa→aaa→aaa→aaa
Vuser3:aaa→aaa→aaa→aaa
Vuser4:aaa→aaa→aaa→aaa
Vuser5:aaa→aaa→aaa→aaa
一次--隨機
都隨機只取一個值
Vuser1:bbb→bbb→bbb→bbb
Vuser2:bbb→bbb→bbb→bbb
Vuser3:ccc→ccc→ccc→ccc
Vuser4:aaa→aaa→aaa→aaa
Vuser5:ccc→ccc→ccc→ccc
一次--唯一
都隨機只取一個值;
Vuser1:aaa→aaa→aaa→aaa
Vuser2:bbb→bbb→bbb→bbb
Vuser3:ccc→ccc→ccc→ccc
File參數類型--Mysql數據向導
點擊【Data Wizard】
點擊【確定】
如圖選擇,點擊【下一步】
File參數類型--SQL Server數據向導
點擊【Data Wizard】
點擊【確定】
點擊【Create】
從下拉列表選擇一個數據庫連接
更改默認數據庫為需要用的數據庫
點擊測試數據源
File參數類型--Oracle數據向導
略。
Unique number類型參數
用於構造不同的用戶數據
造1萬個數據,如手機號碼
13588880000--13588889999
常量跟上一個unique number類型變量。
不足位數,左側補零
Date/Time類型參數