LoadRunner【第四篇】參數化


參數化的定義及使用場景

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

參數化的原因,並不是網上說的真實模擬不同用戶,真實反應服務器性能,而是:

  數據唯一性(比如注冊名不能一樣)

  避免數據庫查詢緩存

思考:模擬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類型參數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM