一、關(guān)于參數(shù)的定義
函數(shù)中參數(shù)的值就是在錄制過程中輸入的實際值。
例如,你錄制了一個 Web 應(yīng)用程序的腳本。腳本生成器生成了一個聲明,該聲明搜索名稱為 “軟件測試” 的圖書的數(shù)據(jù)庫。當(dāng)你用多個虛擬用戶和迭代回放腳本時,也許你不想重復(fù)使用相同的值“ 軟件測試”,還需要其他的值如“項目管理” 。例如平常經(jīng)常用到的,登陸界面輸入用戶名和密碼,那么,你就可以用參數(shù)來取代這個常量。結(jié)果就是你可以用指定的數(shù)據(jù)源的數(shù)值來取代參數(shù)值。數(shù)據(jù)源可以是一個文件,也可以是內(nèi)部產(chǎn)生的變量。
用參數(shù)表示用戶的腳本有兩個優(yōu)點:① 可以使腳本的長度變短。② 可以使用不同的數(shù)值來測試你的腳本。例如,如果你企圖搜索不同名稱的圖書,你僅僅需要寫提交函數(shù)一次。在回放的過程中,你可以使用不同的參數(shù)值,而不只搜索一個特定名稱的值。
參數(shù)化包含以下兩項任務(wù):① 在腳本中用參數(shù)取代常量值。② 設(shè)置參數(shù)的屬性以及數(shù)據(jù)源。
參數(shù)化僅可以用于一個函數(shù)中的參量。你不能用參數(shù)表示非函數(shù)參數(shù)的字符串。另外,不是所有的函數(shù)都可以參數(shù)化的
二、參數(shù)的創(chuàng)建
可以指定名稱和類型來創(chuàng)建參數(shù)。不存在對腳本中參數(shù)個數(shù)的限制。在 Web 程序的用戶腳本中,你可以使用如下過程在基于文本的腳本視圖中創(chuàng)建參數(shù)?;蛘?,也可以在基于圖標(biāo)的樹形視圖中創(chuàng)建參數(shù)。
在基于文本的腳本視圖中創(chuàng)建一個參數(shù):
1 、 將光標(biāo)定位在要參數(shù)化的字符上,點擊右鍵。打開彈出菜單。
2 、 在彈出菜單中,選擇 “Replace with a Parameter” 。選擇或者創(chuàng)建參數(shù)的對話框彈出。
3 、 在 “Parameter name” 中輸入?yún)?shù)的名稱,或者選擇一個在參數(shù)列表中已經(jīng)存在的參數(shù)。
4 、 在 “Parameter type” 下拉列表中選擇參數(shù)類型
1)、 Date/Time Date/Time 用當(dāng)前的日期 / 時間替換參數(shù)。要指定一個 Date/Time 格式,你可以從菜單列表中選擇格式,或者指定你自己的格式。這個格式應(yīng)該和你腳本中錄制的 Date/Time 格式保持一致。你可以設(shè)置一個時間參數(shù)的偏移量,如果你打算測試下個月的日期,你就可以選擇偏移量為30。你也可以設(shè)置前偏移量和后偏移量,默認(rèn)的是前偏移量。另外你可以命令vguen在工作日使用date值,不包括周六和周日(沒有明白這個的具體用處,明白的請告知)。
c complete date and time in digits
#c complete date as a string and time
H hours (24 hour clock)
I hours (12- hour clock)
M minutes
S seconds
p AM or PM
d day
m month in digits (01-12)
b month as a string - short format (e.g. Dec)
B month as a string - long format (e.g. December)
y year in short format (e.g. 03)
Y year in long format (e.g. 2003)
char *c =" {NewParam}";
lr_output_message("current time %s",lr_eval_string (c));試試結(jié)果吧,呵呵
2 )、 Group Name Group Name 用虛擬用戶組名稱替換參數(shù)。在創(chuàng)建 scenario 的時候,你可以指定虛擬用戶組的名稱。當(dāng)從用戶腳本生成器運(yùn)行腳本的時候,虛擬用戶組名稱總是 None 。
char *c =" {NewParam}"; //%05s
char *d="{NewParam_1}";//%07s
lr_log_message("group(5s) is %s,group(7s)is %s",lr_eval_string (c),lr_eval_string (d));
顯示的結(jié)果為:group(5s)is 0None,group(7s)is 000None
3). Iteration Number Iteration Number 用當(dāng)前的迭代數(shù)目替換參數(shù)
設(shè)置迭代次數(shù)為3
char *c =" {NewParam}"; //%05s
char *d="{NewParam_1}";//%07s
lr_log_message("Iteration(5s) is %s,Iteration(7s)is %s",lr_eval_string (c),lr_eval_string (d));
結(jié)果為:Iteration(5s) is 00001,Iteration(7s)is 0000001
Iteration(5s) is 00002,Iteration(7s)is 0000002
Iteration(5s) is 00003,Iteration(7s)is 0000003
4)、 Load Generator Name Load Generator Name 用腳本負(fù)載生成器的名稱替換參數(shù)。負(fù)載生成器是虛擬用戶在運(yùn)行的計算機(jī)。
5) 、 Random Number Random Number 用一個隨機(jī)數(shù)替換參數(shù)。通過指定最大值和最小值來設(shè)置隨機(jī)數(shù)的范圍。
6)、 Unique Number Unique Number 用一個唯一的數(shù)字來替換參數(shù)。你可以指定一個起始數(shù)字和一個塊的大小。
7 、 Vuser ID Vuser ID 用分配給虛擬用戶的 ID 替換參數(shù), ID 是由 Loadrunner 的控制器在 scenario 運(yùn)行時生成的。如果你從腳本生成器運(yùn)行腳本的話,虛擬用戶的 ID 總是 -1
8、User-Defined Functions ―― 調(diào)用外部 DLL 函數(shù)生成的數(shù)據(jù) ,函數(shù)必須是如下格式:
__declspec(dllexport) char *<functionName>(char *, char *) 例如:
__declspec(dllexport) char *UF_GetVersion(char *x1, char *x2) {return "Ver2.0";}
9、table或file 從已存在的數(shù)據(jù)庫中導(dǎo)入文件
可以使用下列兩種方式之一:
1. 使用 Microsoft Query (要求在系統(tǒng)上先安裝 MS Query )。
2. 指定數(shù)據(jù)庫連接字符串和 SQL 語句。
用戶腳本生成器在從數(shù)據(jù)庫中導(dǎo)入數(shù)據(jù)的過程中提供了一個向?qū)АT谙驅(qū)е?,你指明如何?dǎo)入數(shù)據(jù)-通過 MS Query 創(chuàng)建查詢語句或者直接書寫 SQL 語句。在導(dǎo)入數(shù)據(jù)以后,以 .dat 為后綴并作為正規(guī)的參數(shù)文件保存。
要開始導(dǎo)入數(shù)據(jù)庫中數(shù)據(jù)的過程,在參數(shù)屬性對話框中點擊“ Data Wizard ”,則,數(shù)據(jù)庫查詢向?qū)棾觥?br>要創(chuàng)建新的查詢
1. 選擇“ Create new query ”。如果需要 MS Query 的幫助,選擇“ Show me how to use Microsoft Query ”,然后點擊“ Finish ”。
如果你還沒有安裝 Microsoft Query , Loadrunner 會提示你這個功能不可用。在進(jìn)行之前,從 Microsoft Office 中安裝 MS Query 。
2. 在 Microsoft Query 中遵循以下步驟,導(dǎo)入期望的表和列。
3. 在完成數(shù)據(jù)的導(dǎo)入后,選擇“ Exit and return to Virtual User Generator ”,然后點擊“ Finish ”。在參數(shù)屬性對話框中數(shù)據(jù)庫記錄以 data 文件的形式顯示出來。
要在 MS Query 中編輯并查看數(shù)據(jù),選擇“ View data or edit in Microsoft Query ”。若要結(jié)束,則選擇“ File>Exit and return to Virtual User Generator ”返回到腳本生成器。
4. 在“ Select Column ”部分,指定包含當(dāng)前參數(shù)數(shù)據(jù)的列可以指定列號或者列名。注意:列標(biāo)題默認(rèn)為第 0 行( row 0 )。
5. 從“ Select next row ”列表中選擇一個更新方法來告訴虛擬用戶在腳本指定的過程中如何選擇表中的數(shù)據(jù)??蛇x項是: Sequential 、 Random 、 Unique 或者 Same Line As 。
6. 如果選擇“ Advance row each iteration ”,虛擬用戶在每次迭代的時候會使用新的一行的數(shù)據(jù)而不是重復(fù)同樣的數(shù)據(jù)。
要指定數(shù)據(jù)庫連接或者 SQL 語句
1. 選擇“ Specify SQL Statement ”,然后點擊“ Next ”。
2. 點擊“ Create ”指定一個新的連接字符串。選擇數(shù)據(jù)源的窗口彈出。
3. 選擇已有的數(shù)據(jù)源,或者點擊“ New ”創(chuàng)建一個新的數(shù)據(jù)源。向?qū)⑻崾灸愦┻^創(chuàng)建 ODBC 數(shù)據(jù)源的過程。在完成后,連接字符串就會在連接字符串框中顯示出來。
4. 在 SQL 框中,輸入或者粘貼 SQL 語句。
5. 點擊“ Finish ”繼續(xù) SQL 語句并導(dǎo)入數(shù)據(jù)。數(shù)據(jù)庫記錄將以 data 文件的形式顯示在參數(shù)屬性框中。
6. 在“ Select Column ”部分中,指定包含當(dāng)前參數(shù)數(shù)據(jù)的列。你可以指定列號或者列名。
7. 從“ Select next row ”列表中選擇一個更新方法來告訴虛擬用戶在腳本指定的過程中如何選擇表中的數(shù)據(jù)??蛇x項是: Sequential 、 Random 、 Unique 或者 Same Line As 。
8. 如果選擇“ Advance row each iteration ”,虛擬用戶在每次迭代的時候會使用新的一行的數(shù)據(jù)而不是重復(fù)同樣的數(shù)據(jù)。
數(shù)據(jù)文件 數(shù)據(jù)文件包含著腳本執(zhí)行過程中虛擬用戶訪問的數(shù)據(jù)。局部和全局文件中都可以存儲數(shù)據(jù)??梢灾付ìF(xiàn)有的 ASCII 文 件、用腳本生成器創(chuàng)建一個新的文件或者引入一個數(shù)據(jù)庫。在參數(shù)有很多已知值的時候數(shù)據(jù)文件非常有用。數(shù)據(jù)文件中的數(shù)據(jù)是以表的形式存儲的。一個文件中可以包含很多參數(shù)值。每一列包含一個參數(shù)的數(shù)據(jù)。列之間用分隔符隔開,比如說,用逗號。 對數(shù)據(jù)文件設(shè)置參數(shù)屬性 如果使用文件作為參數(shù)的數(shù)據(jù)源,必須指 定以下內(nèi)容:文件的名稱和位置、包含數(shù)據(jù)的列、文件格式,包括列的分隔符、更新方法?! ∪绻麉?shù)的類型是“ File” ,打開參數(shù)屬性( Parameter Properties )對話框,設(shè)置文件屬性如下:
1 、 在 “File path” 中輸入文件的位置,或者點擊 “Browse” 指定一個已有文件的位置。缺省情況下,所有新的數(shù)據(jù)文件名都是 “parameter_name.dat” ,注意,已有的數(shù)據(jù)文件的后綴必須是 .dat 。
2 、 點擊 “Edit” 。記事本打開,里面第一行是參數(shù)的名稱,第二行是參數(shù)的初始值。使用諸如逗號之類的分隔符將列隔開。對于每一新的表行開始一行新的數(shù)據(jù)?! ∽⒁猓涸跊]有啟動記事本的情況下如果想添加列,就在參數(shù)屬性對話框中點擊“ Add Col” ,那么 “Add new column” 對話框就會彈出。輸入新列的名稱,點擊 “OK” 。腳本生成器就會添加該列到表中,并顯示該列的初始值。
3 、 在 “Select Column” 部分,指明包含當(dāng)前參數(shù)數(shù)據(jù)的列。你可以指定列名或者列號。列號是包含你所需要數(shù)據(jù)的列的索引。列名顯示在每列的第一行( row 0 )。
4 、 在 “Column delimiter” 中輸入列分隔符,你可以指定逗號、空格符等等。
5 、 在 “First data line” 中,在腳本執(zhí)行的時候選擇第一行數(shù)據(jù)使用。列標(biāo)題是第 0 行。若從列標(biāo)題后面的第一行開始的話,那就在 “First data line” 中輸入 1 。如果沒有列標(biāo)題,就輸入 0 。
6 、 在 “Select next row” 中輸入更新方法,以說明虛擬用戶在腳本執(zhí)行的過程中如何選擇表中的數(shù)據(jù)。方法可以是:連續(xù)的、隨機(jī)的、唯一的、或者與其它參數(shù)表的相同行。
6.1 、 順序( Sequential ):該方法順序地給虛擬用戶分配參數(shù)值。如果正在運(yùn)行的虛擬用戶訪問數(shù)據(jù)表的時候,它會取到下一行中可用的數(shù)據(jù)。
6.2 、 隨機(jī)( Random ):該方法在每次迭代的時候會從數(shù)據(jù)表中取隨機(jī)數(shù)
6.3 、 使用種子取隨機(jī)順序( Use Random Sequence with Seed ):如果從 Loadrunner 的控制器來運(yùn)行 scenario ,你可以指定一個種子數(shù)值用于隨機(jī)順序。每一個種子數(shù)值在測試執(zhí)行的時候代表了一個隨機(jī)數(shù)的順序。無論你何時使用這個種子數(shù)值,在 scenario 中同樣的數(shù)據(jù)順序就被分配給虛擬用戶。如果在測試執(zhí)行的時候發(fā)現(xiàn)了一個問題并且企圖使用同樣的隨機(jī)數(shù)序列來重復(fù)測試,那么,你就可以啟動這個功能(可選項)。
6.4 、 唯一( Unique ): Unique 方法分配一個唯一的有順序的值給每個虛擬用戶的參數(shù)。
6.5 、與以前定義的參數(shù)取同一行( Same Line As ):該方法從和以前定義過的參數(shù)中的同樣的一行分配數(shù)據(jù)。你必須指定包含有該數(shù)據(jù)的列。在下拉列表中會出現(xiàn)定義過的所有參數(shù)列表。注意:至少其中的一個參數(shù)必須是 Sequential 、 Random 或者 Unique 。
如果數(shù)據(jù)表中有三列,三個參數(shù)定義在列表中: id1 , name1 和 title1 ,如下:。
ID Name Title
132 Kim Manager
187 Cassie Engineer
189 Jane VP
對于參數(shù) id1 ,你可以指示虛擬用戶使用 Random 方法,而為參數(shù) name1 和 title1 就可以指定方法 “Same Line as id1” 。所以,一旦 ID“132” 被使用,那么,姓名( Name ) “Kim” 和職位( Title ) “Manager” 同時被使用。
7 、 Updta value on 數(shù)據(jù)的更新方法
7.1 、 Each iteration ――每次反復(fù)都要取新值。
7.2 、 Each occurrence ――只要發(fā)現(xiàn)該參數(shù)就要重新取值。
7.3 、 Once ――在所有的反復(fù)中都使用同一個值
8 、 When out of values 超出范圍:(選擇數(shù)據(jù)為 unique 時才可用到)
8.1 、 Abort Vuser ――中止
8.2 、 Continue in a cyclic manner ――繼續(xù)循環(huán)取值
8.3 、 Continue with last value ――取最后一個值
9 、 Allocate Vuser values in the Controller 在控制器中分配值:(選擇數(shù)據(jù)為 unique 時才可用到)