LoadRunner【第四篇】參數化

參數化的定義及使用場景

定義:將腳本中的特定值用變量替代,該變量值是變化的(注意:這個值是咱們本身建立的,不是服務器返回的)。 html

參數化的緣由,並非網上說的真實模擬不一樣用戶,真實反應服務器性能,而是:sql

  數據惟一性(好比註冊名不能同樣)數據庫

  避免數據庫查詢緩存緩存

思考:模擬1000個用戶登陸論壇,1000個相同的用戶名相同的密碼與1000個不一樣的用戶名不一樣的密碼的區別?  服務器

File參數類型--文本

File參數類型--文本參數顯示問題,參考:http://www.javashuo.com/article/p-kcwipbkm-kq.html併發

進行參數化前,咱們要先把須要用到的參數設計好,這裏以建立「File類型參數」爲例dom

點擊下面的圖標ide

點擊左下角【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類型參數

相關文章
相關標籤/搜索