VU——用戶行為的模擬器2
LoadRunner之所以強(qiáng)大,很大原因是VU的功能強(qiáng)大。VU幾乎支持模擬當(dāng)今所有主流的軟件客戶端,同時(shí)還在不斷地推陳出新,每個(gè)Vuser腳本的設(shè)置也是非常繁多和詳細(xì)的,達(dá)到了精確模擬的效果
了解熟悉VU是玩轉(zhuǎn)LoadRunner要做的第一件事情,最常聽(tīng)到的關(guān)于VU的描述就是VU通過(guò)運(yùn)行VU腳本模擬了用戶對(duì)軟件操作行為
VU是基于網(wǎng)絡(luò)協(xié)議的,被測(cè)服務(wù)器是通過(guò)各種各樣的網(wǎng)絡(luò)協(xié)議與客戶端打交道的。VU要“騙過(guò)”被測(cè)服務(wù)器,當(dāng)然就要遵守這些協(xié)議,按規(guī)矩、步驟來(lái)動(dòng)作,否則就會(huì)吃“閉門(mén)羹”,毫不留情地被服務(wù)器拒絕
VU錄制生成的也是網(wǎng)絡(luò)協(xié)議層次的腳本,在回放時(shí),VU將按照錄制下來(lái)的網(wǎng)絡(luò)協(xié)議,一一重放,基于網(wǎng)絡(luò)協(xié)議腳本的好處是,可以使用相對(duì)少的硬件資源,來(lái)生成大量的虛擬用戶負(fù)載。相比之下,WinRunner和QTP的腳本是基于界面事件GUI的,它在一臺(tái)主機(jī)上同時(shí)只能運(yùn)行一個(gè)虛擬用戶的腳本,因?yàn)橐粋€(gè)虛擬用戶會(huì)占用整個(gè)主機(jī)的資源。
推論一,VU不關(guān)心用戶在界面上發(fā)生的事情
推論二,VU中的操作關(guān)聯(lián)與界面上的操作關(guān)聯(lián)是不一致的
如用客戶查詢系統(tǒng),查詢出此客戶
1、點(diǎn)擊這個(gè)客戶,打開(kāi)另外一個(gè)頁(yè)面,展現(xiàn)此客戶的基本信息
2、點(diǎn)擊基本信息中的“交易歷史明細(xì)”,系統(tǒng)經(jīng)過(guò)查詢后,刷新此頁(yè)面,顯示明細(xì)結(jié)果
3、顯示,在UI測(cè)試中,要測(cè)試第三步驟,之前必須完成第一步和第二步,但在VU中就不是這樣
這三個(gè)操作被VU記錄成三個(gè)函數(shù),如果是上下文無(wú)關(guān)的函數(shù),其實(shí)完全可以忽略掉第一和第二個(gè)函數(shù),只執(zhí)行和參數(shù)化第三個(gè)函數(shù)
錄制腳本
VU通過(guò)錄制用戶在客戶端軟件的操作直接生成腳本,用戶的每個(gè)協(xié)議級(jí)的操作以LoadRunner的API函數(shù)方式記錄在腳本里?;胤拍_本的時(shí)候,通過(guò)執(zhí)行API函數(shù)來(lái)模擬最初用戶的操作動(dòng)作
選擇協(xié)議
LoadRunner具體有哪些協(xié)議,Vuser類型可根據(jù)應(yīng)用領(lǐng)域分為下列幾種:
應(yīng)用程序部署解決方案:Citrix ICA
客戶端/服務(wù)器:MS SQL Server、Oracle(2層)、Sybase Ctlib等協(xié)議
自定義:C模版、Java模版、JavaScript類型的腳本
分布式組件:適用于COM/DCOM、Corba-Java和Rmi-Java協(xié)議
電子商務(wù):FTP、Web(HTTP/HTML)、SOAP等協(xié)議
流數(shù)據(jù):Media Player(MMS)和Real協(xié)議
無(wú)線:i-Mode、VoiceXML和WAP協(xié)議
新建Vuser,彈出協(xié)議選擇對(duì)話框

兩種協(xié)議選擇方式:?jiǎn)螀f(xié)議模式和多協(xié)議模式
單協(xié)議模式
用戶以單協(xié)議錄制時(shí),VU只錄制在既定協(xié)議上的用戶操作,在VU中我們可以使用單協(xié)議模式選擇任何一種協(xié)議
多協(xié)議模式
用戶以多協(xié)議錄制時(shí),VU錄制幾個(gè)協(xié)議上的操作,不是任意的協(xié)議都可以組合成多協(xié)議模式。有以下協(xié)議支持多協(xié)議錄制:COM、FTP、IMAP、Oracle NCA、POP3、Real Player、Windows Socket(raw)、SMTP和web。雙協(xié)議Web/Win Socket應(yīng)該被看作單協(xié)議,因?yàn)槠錂C(jī)制與多協(xié)議不一樣
不同類型的Vuser的另外一個(gè)區(qū)別是多Action的支持,一些協(xié)議支持多Action,目前這些協(xié)議是:Oracle NCA、Web、RTE、general C、WAP、I-Mode和voice XML
規(guī)劃腳本結(jié)構(gòu)
在錄制時(shí),用戶可以選擇哪些操作生成腳本在vuser_init、Action和vuser_end中,同時(shí),也可以在錄制時(shí)隨時(shí)加入transaction的定義、注釋和同步點(diǎn)
HTTP Vuser 中的 URLmode 和 HTML mode
“URL-based script”說(shuō)明腳本中的表示采用基于URL的方式,所有的HTTP的請(qǐng)求都會(huì)被錄制下來(lái),單獨(dú)生成函數(shù),所以URL模式生成的腳本會(huì)顯得有些雜亂
選擇HTML還是URL錄制
(1)基于瀏覽器的應(yīng)用程序推薦使用 HTML-based script
(2)不是基于瀏覽器的應(yīng)用程序推薦使用URL-based script
(3)如果基于瀏覽器的應(yīng)用程序中包含了JavaScript并且該腳本向服務(wù)器產(chǎn)生了請(qǐng)求,比如DataGrid的分頁(yè)按鈕等,也要使用URL-based script方式錄制
(4)基于瀏覽器的應(yīng)用程序中使用了HTTPS安全協(xié)議,使用URL-based script方式錄制
查看日志
在錄制和回放的時(shí)候,VU會(huì)分別把發(fā)生的事件記錄成日志文件,這些日志有利于跟蹤VU和服務(wù)器的交互過(guò)程。可以通過(guò)VU輸出窗口觀察日志,也可以到腳本目錄中直接查看文件
1、執(zhí)行日志
腳本運(yùn)行時(shí)的輸出都記在Log里
“輸出”窗口的“執(zhí)行日志”顯示的消息用于描述Vuser運(yùn)行時(shí)執(zhí)行的操作。該信息可說(shuō)明在方案中執(zhí)行腳本時(shí),該腳本的運(yùn)行方式
腳本執(zhí)行完成后,可以檢查“執(zhí)行日志”中的消息,以查看腳本在運(yùn)行時(shí)是否發(fā)生錯(cuò)誤
“執(zhí)行日志”中使用了不同顏色的文本
黑色:標(biāo)準(zhǔn)輸出消息
紅色:標(biāo)準(zhǔn)錯(cuò)誤消息
綠色:用引號(hào)括起來(lái)的文字字符串(例如URL)
藍(lán)色:事務(wù)信息(開(kāi)始、結(jié)束、狀態(tài)和持續(xù)時(shí)間)
如雙擊以操作名開(kāi)始的行,光標(biāo)將會(huì)跳到生成的腳本中的相應(yīng)步驟上
執(zhí)行日志是我們調(diào)試腳本時(shí)最有用的信息
錄制日志
當(dāng)錄制腳本時(shí),Vugen會(huì)攔截Client端(瀏覽器)與Server端(服務(wù)器)之間的對(duì)話,并且通通記錄下來(lái),產(chǎn)生腳本。
腳本和Recording Log最大的差別在于,腳本只記錄了Client端要對(duì)Server端所說(shuō)的話,而Recording Log則是完整記錄二者的對(duì)話,因此通過(guò)錄制日志,能夠更加清楚地看到客戶端與服務(wù)器的交互,對(duì)我們開(kāi)發(fā)和debug腳本非常有幫助
產(chǎn)生日志
產(chǎn)生日志記錄了腳本錄制的設(shè)置、網(wǎng)絡(luò)事件到腳本函數(shù)的轉(zhuǎn)化過(guò)程
回放腳本
單擊run按鈕,或按快捷鍵“F5”就可以運(yùn)行腳本
關(guān)聯(lián)
錄制好的腳本回放能否成功時(shí),首先想到第一個(gè)可能出現(xiàn)的問(wèn)題—關(guān)聯(lián)
關(guān)聯(lián)是LoadRunner中一個(gè)重要的應(yīng)用,也是經(jīng)常犯錯(cuò)誤的地方
如果腳本需要關(guān)聯(lián)(Correlation),在還沒(méi)做之前是不會(huì)執(zhí)行通過(guò),也就是會(huì)有錯(cuò)誤信息發(fā)生,會(huì)出現(xiàn)什么錯(cuò)誤信息,與系統(tǒng)實(shí)際的錯(cuò)誤處理機(jī)制有關(guān),錯(cuò)誤信息有可能會(huì)提醒您要重新輸入,但是也有可能直接就顯示HTTP404的錯(cuò)誤信息,這種問(wèn)題在任何系統(tǒng)中都是非常常見(jiàn)的問(wèn)題
服務(wù)器返回給客戶端一些動(dòng)態(tài)變化的值,客戶端使用這些值訪問(wèn)服務(wù)器的時(shí)候,不能把這些值寫(xiě)死在腳本里面,而應(yīng)該存放在一個(gè)變量里面。這就是關(guān)聯(lián)的概念
VU為我們提供了三種關(guān)聯(lián)機(jī)制
錄制前Correlation(關(guān)聯(lián))
服務(wù)器就像一個(gè)“飯店”,而客戶端就像“拿著小票領(lǐng)飯的食客”。如果在進(jìn)飯店之前,已經(jīng)預(yù)先知道小票的樣子,那么這時(shí)就可以啟用錄制前關(guān)聯(lián)了,錄制前關(guān)聯(lián)又叫做規(guī)則關(guān)聯(lián)。使用錄制前關(guān)聯(lián)的必要條件是必須在錄制腳本之前就知道哪些變量是需要關(guān)聯(lián)的
規(guī)則來(lái)源有兩種:
(1)內(nèi)建關(guān)聯(lián)規(guī)則
Vugen已經(jīng)針對(duì)常用的一些應(yīng)用系統(tǒng),如mySAP、Oracle、Siebel等內(nèi)建關(guān)聯(lián)規(guī)則,這些應(yīng)用系統(tǒng)可能會(huì)有一種以上的關(guān)聯(lián)規(guī)則
(2)使用者自訂關(guān)聯(lián)規(guī)則
除了內(nèi)建的關(guān)聯(lián)規(guī)則之外,使用者也可以自訂關(guān)聯(lián)規(guī)則
規(guī)則的應(yīng)用
(1)啟用自動(dòng)關(guān)聯(lián)(auto-correlation)
點(diǎn)選Vugen的“Tools”>“Recording Options”,打開(kāi)“Recording Options”對(duì)話框,選取“HTTP Properties” >“Correlation”,勾選“Enable correlation during recording”,以啟用自動(dòng)關(guān)聯(lián)
(2)運(yùn)行腳本驗(yàn)證關(guān)聯(lián)機(jī)制
當(dāng)關(guān)聯(lián)規(guī)則都運(yùn)行開(kāi)始錄制腳本時(shí),在錄制過(guò)程中,當(dāng)Vugen偵測(cè)到符合關(guān)聯(lián)規(guī)則的數(shù)據(jù)時(shí),會(huì)依照設(shè)定建立關(guān)聯(lián)
錄制后關(guān)聯(lián)
有別于內(nèi)建關(guān)聯(lián),錄制后關(guān)聯(lián)則是在執(zhí)行腳本后才會(huì)建立關(guān)聯(lián),當(dāng)錄制完腳本后,腳本至少需要被執(zhí)行過(guò)一次,錄制后關(guān)聯(lián)才會(huì)座椅。錄制后關(guān)聯(lián)會(huì)嘗試找出錄制時(shí)與執(zhí)行時(shí),服務(wù)器響應(yīng)內(nèi)容的差異部分,找出需要關(guān)聯(lián)的數(shù)據(jù),并建立關(guān)聯(lián)
有時(shí)可能有些需要做關(guān)聯(lián)的動(dòng)態(tài)數(shù)據(jù),連自動(dòng)關(guān)聯(lián)都無(wú)法偵測(cè)出來(lái),這時(shí)就需要手動(dòng)關(guān)聯(lián)
手動(dòng)關(guān)聯(lián)
錄制前關(guān)聯(lián)和錄制后關(guān)聯(lián)都屬于自動(dòng)關(guān)聯(lián)范疇,一般靠自動(dòng)關(guān)聯(lián)能夠解決腳本中大多數(shù)的關(guān)聯(lián)問(wèn)題,但是萬(wàn)一它們都不能起作用的話,那只能采用手動(dòng)關(guān)聯(lián)方法了。手動(dòng)關(guān)聯(lián)的原理與自動(dòng)關(guān)聯(lián)一樣,就是找出哪些變量是需要關(guān)聯(lián)的,然后用LoadRunner提供的web_reg_save_parame來(lái)實(shí)現(xiàn)關(guān)聯(lián)
手動(dòng)關(guān)聯(lián)的執(zhí)行過(guò)程
1、使用相同的業(yè)務(wù)流程與數(shù)據(jù),錄制兩份腳本
2、使用WinDiff工具協(xié)助找出需要關(guān)聯(lián)的數(shù)據(jù)
WinDiff是內(nèi)嵌在VU中的一個(gè)文件比較工具,用于比較兩個(gè)文件的內(nèi)容,在這里用它來(lái)比較兩個(gè)腳本的不同之處,從而找到需要被關(guān)聯(lián)的數(shù)據(jù)
3、確定被關(guān)聯(lián)數(shù)據(jù)的左、右邊界
4、使用web_reg_save_param函數(shù)手動(dòng)建立 關(guān)聯(lián)
5、將腳本中有用到關(guān)聯(lián)的數(shù)據(jù),以參數(shù)取代
關(guān)聯(lián)的用途和意義:
1、簡(jiǎn)化和優(yōu)化腳本代碼
2、動(dòng)態(tài)產(chǎn)生數(shù)據(jù)
3、支持唯一數(shù)據(jù)
有些系統(tǒng)要求使用唯一的數(shù)據(jù),錄制時(shí)生成的數(shù)據(jù),在回放時(shí)就重復(fù)了,無(wú)法保持唯一,也將不可用
手動(dòng)關(guān)聯(lián)實(shí)現(xiàn)原理
1、捕獲第一個(gè)操作的輸出
需要知道哪個(gè)值需要關(guān)聯(lián)的,可以用wdiff去對(duì)比兩個(gè)錄制同樣操作的腳本,其中不同的地方可能就是需要關(guān)聯(lián)的
2、保存為參數(shù)
3、將參數(shù)化傳遞到另外一個(gè)操作的輸入
把另外一個(gè)操作中的常數(shù),替換成參數(shù)變量
腳本視圖和樹(shù)視圖
VU提供兩種視圖來(lái)查看腳本的內(nèi)容,一個(gè)是腳本視圖,另一個(gè)是基于圖標(biāo)的樹(shù)視圖,所有類型的Vuser都有文本腳本視圖,但是只有特定的Vuser才會(huì)有樹(shù)視圖
樹(shù)視圖(Tree View)
TreeView也叫做基于icon的View,也就是說(shuō),腳本的每個(gè)函數(shù)在Tree View中都以一個(gè)帶有icon的節(jié)點(diǎn)來(lái)代替。
TreeView的好處是使用戶方便地修改腳本,TreeView支持拖拽,可以把任意一個(gè)節(jié)點(diǎn)拖拽到他想要的地方,從而達(dá)到修改腳本的目的。用戶可以右鍵單擊節(jié)點(diǎn),進(jìn)行修改/刪除當(dāng)前函數(shù)參數(shù)屬性,增加函數(shù)等操作,通過(guò)TreeView能夠增加LoadRunner提供的部分常用通用函數(shù)和協(xié)議相關(guān)函數(shù)。如WebServiceVuser就不能通過(guò)TreeView參數(shù)化一些復(fù)雜的數(shù)據(jù)類型,這種情況下,就需要ScriptView
腳本視圖(Script View)
在ScriptView中能夠看到一行行的API函數(shù),ScriptView合適一些高級(jí)用戶,通過(guò)ScriptView向腳本中增加一些其他API函數(shù)
理解Snapshot
Snapshot——快照,代表當(dāng)前的step,Snapshot顯示了客戶端在執(zhí)行完當(dāng)前step后的樣子
Snapshot有兩種生成方式
一種是在record的時(shí)候生成,另一種是在replay的時(shí)候生成??梢詫?duì)比兩種方式生成的Snapshot,以發(fā)現(xiàn)哪些是動(dòng)態(tài)值,需要參數(shù)化
Transaction(事務(wù))
事務(wù)是計(jì)算機(jī)程序設(shè)計(jì)中一個(gè)很重要的概念。
一個(gè)事務(wù)應(yīng)該具有原子性、一致性、隔離性和持久性
在LoadRunner里,定義事務(wù)主要是為了度量服務(wù)器的性能。每個(gè)事務(wù)度量服務(wù)器響應(yīng)指定的Vuser請(qǐng)求所用的時(shí)間,這些請(qǐng)求可以是簡(jiǎn)單的任務(wù),也可以是復(fù)雜的任務(wù)
手工插入Transaction函數(shù)分為“顯示事務(wù)”和“隱式事務(wù)”的機(jī)制,在VU的Run-time Settrings中又成為“自動(dòng)事務(wù)”
在Run-time Settrings中,在Miscellaneous選項(xiàng)卡的Automatic Transaction中定義自動(dòng)事務(wù)
可以設(shè)置LoadRunner直接按事務(wù)處理Vuser中的每個(gè)Action或step。Action指的是vuser_init、Action和vuser_end三大函數(shù),而step指的是LoadRunner執(zhí)行的每個(gè)函數(shù),LoadRunner將Action名或step名指定為事務(wù)名,默認(rèn)情況下,將啟用按Action使用自動(dòng)事務(wù)的功能
Rendezvous Point(同步點(diǎn))
在系統(tǒng)上模擬較重的用戶負(fù)載,需要同步各個(gè)Vuser以便在同一時(shí)刻執(zhí)行任務(wù),通過(guò)創(chuàng)建集合點(diǎn),可以確保多個(gè)Vuser同時(shí)執(zhí)行操作。當(dāng)某個(gè)Vuser到達(dá)該集合點(diǎn)時(shí),Controller會(huì)將其保留,直到參與該集合的全部Vuser都到達(dá)。當(dāng)滿足集合條件時(shí),Controller將釋放Vuser
可以通過(guò)將集合點(diǎn)插入到Vuser腳本中來(lái)指定會(huì)合位置
ThinkTime(思考時(shí)間)
用戶在執(zhí)行兩個(gè)連續(xù)操作期間等待的時(shí)間稱為“思考時(shí)間”
Vuser使用lr_think_time函數(shù)模擬用戶思考時(shí)間,錄制Vuser腳本時(shí),Vugen將錄制實(shí)際的思考時(shí)間并將相應(yīng)的lr_think_time語(yǔ)句插入到Vuser腳本??梢跃庉嬕唁浿频膌r_think_time語(yǔ)句,且可以向Vuser腳本中手動(dòng)添加更多的lr_think_time語(yǔ)句
數(shù)據(jù)驅(qū)動(dòng)—參數(shù)化
數(shù)據(jù)驅(qū)動(dòng)就是把測(cè)試腳本和測(cè)試數(shù)據(jù)分離開(kāi)來(lái)的一種思想,腳本體現(xiàn)測(cè)試流程,數(shù)據(jù)體現(xiàn)測(cè)試案例。LoadRunner的參數(shù)化功能是數(shù)據(jù)驅(qū)動(dòng)測(cè)試思想的一個(gè)重要實(shí)現(xiàn)。
為什么需要參數(shù)化
在錄制程序運(yùn)行的過(guò)程中,Vugen(腳本生成器)自動(dòng)生成了腳本以及錄制過(guò)程中實(shí)際用到的數(shù)據(jù),在這個(gè)時(shí)候,腳本和數(shù)據(jù)是混在一起的
客戶希望當(dāng)用LoadRunner多用戶多循環(huán)運(yùn)行時(shí),不只是重復(fù)一個(gè)用戶的登錄,此函數(shù)中的數(shù)據(jù)要能變化,這樣,就把某些數(shù)據(jù)用一個(gè)參數(shù)來(lái)代替,就是把常量變成變量
參數(shù)化是學(xué)習(xí)LoadRunner中經(jīng)常用到的功能,除了實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)之外,參數(shù)化腳本還有以下兩個(gè)優(yōu)點(diǎn)
1、可以使腳本的長(zhǎng)度變短
2、可以增強(qiáng)腳本的可讀性和可維護(hù)性
實(shí)際上,參數(shù)化的過(guò)程如下:
1、在腳本中用參數(shù)取代常量值
2、設(shè)置參數(shù)的屬性以及數(shù)據(jù)源
參數(shù)的創(chuàng)建
LoadRunner對(duì)腳本中參數(shù)個(gè)數(shù)沒(méi)有限制,可以在一個(gè)腳本中創(chuàng)建任意多個(gè)參數(shù)。VU可以通過(guò)Tree View和Script View兩種途徑來(lái)改變腳本,包括參數(shù)化功能
參數(shù)的類型,在定義參數(shù)屬性的時(shí)候,要指定參數(shù)值的數(shù)據(jù)源??梢灾付ㄏ铝袛?shù)據(jù)源類型中的任何一種
1、Data Files
這是最常使用的一種參數(shù)類型,它的數(shù)據(jù)存在于文件中。該文件的內(nèi)容可以手工添加,也可以利用LoadRunner 的 Data Wizard從數(shù)據(jù)庫(kù)中導(dǎo)出
2、User-Defined Functions
調(diào)用外部DLL函數(shù)生成的數(shù)據(jù)
3、Internal Data
模擬用戶內(nèi)部產(chǎn)生的數(shù)據(jù)
Internal Data包括以下幾種類型
Date/Time用當(dāng)前的日期/時(shí)間替換參數(shù)。要指定一個(gè)Date/Time格式,可以從菜單列表中選擇格式,或者指定自己的格式。這種格式應(yīng)該和腳本中錄制的Date/Time格式保持一致
Group Name用虛擬用戶組名稱替換參數(shù)。在創(chuàng)建scenario的時(shí)候,可以指定虛擬用戶組的名稱。注:從VU運(yùn)行腳本的時(shí)候,虛擬用戶組名稱總是None
Load Generator Name用腳本負(fù)載生成器的名稱替換參數(shù)。負(fù)載生成器是虛擬用戶在運(yùn)行的計(jì)算機(jī)
Iteration Number用當(dāng)前的迭代數(shù)據(jù)替代參數(shù)
Random Number 用一個(gè)隨機(jī)數(shù)替換參數(shù)。通過(guò)指定最大值和最小值來(lái)設(shè)置隨機(jī)數(shù)的范圍
Unique Number用一個(gè)唯一的數(shù)字來(lái)替換參數(shù),可以指定一個(gè)起始數(shù)字和一個(gè)快的大小
Vuser ID用分配給虛擬用戶的ID替換參數(shù),ID是由LoadRunner的控制器在scenario運(yùn)行時(shí)生成的。如果從腳本生成器運(yùn)行腳本的話,虛擬用戶的ID總是-1
定義參數(shù)的屬性
參數(shù)的屬性定義就是在腳本執(zhí)行過(guò)程中,定義參數(shù)使用的數(shù)據(jù)源
1、可以在基于文本的腳本視圖中定義參數(shù)屬性
2、也可以在基于圖標(biāo)的樹(shù)視圖中定義參數(shù)屬性
使用參數(shù)列表可以在任意時(shí)刻查看所有的參數(shù)、創(chuàng)建新的參數(shù)、刪除參數(shù),或者修改已存在的參數(shù)的屬性
數(shù)據(jù)文件包含者腳本執(zhí)行過(guò)程中虛擬用戶訪問(wèn)的數(shù)據(jù),局部和全局文件中都可以存儲(chǔ)數(shù)據(jù)。
如果使用文件作為參數(shù)的數(shù)據(jù)源,必須指定以下內(nèi)容:文件的名稱和位置、包含數(shù)據(jù)的列、文件格式、包括列的分隔符、更新方法
1、順序(Sequential):該方法順序地給虛擬用戶分配參數(shù)值
2、隨機(jī)(Random):該方法在每次迭代的機(jī)會(huì)從數(shù)據(jù)表中隨機(jī)取一行的數(shù)據(jù)
3、唯一(Unique):該方法分配一個(gè)唯一的有順序的值給每個(gè)虛擬用戶的參數(shù)
4、與以前定義的參數(shù)取同一行(Same Line As ):該方法從與以前定義過(guò)的參數(shù)中同樣的一行分配數(shù)據(jù),但必須指定包含有該數(shù)據(jù)的列。注:至少其中的一個(gè)參數(shù)必須是Sequential、Random或者Unique
高級(jí)—從已存在的數(shù)據(jù)庫(kù)中導(dǎo)入?yún)?shù)數(shù)據(jù)
LoadRunner允許利用參數(shù)化從已經(jīng)存在的數(shù)據(jù)庫(kù)中導(dǎo)入數(shù)據(jù)
1、使用Micorosoft Query(在系統(tǒng)上先安裝MS Query)
2、指定數(shù)據(jù)庫(kù)連接字符串和SQL語(yǔ)句
用戶腳本生成器在數(shù)據(jù)庫(kù)中導(dǎo)入數(shù)據(jù)的過(guò)程中提供了一個(gè)向?qū)?。在想到中,指明如何?dǎo)入數(shù)據(jù)——通過(guò)MS Query創(chuàng)建查詢語(yǔ)句或者直接寫(xiě)SQL語(yǔ)句
檢查點(diǎn)(Check point)
LoadRunner的很多API函數(shù)的返回值會(huì)改變腳本運(yùn)行結(jié)果。如:web_find函數(shù),如果它查找匹配的結(jié)果為空,它的返回值就是LR_FALL,整個(gè)腳本的運(yùn)行結(jié)果也將置為FALL,反之,查找匹配成功,則web_find返回值是LR_PASS,整個(gè)腳本的運(yùn)行結(jié)果置為PASS。腳本的結(jié)果則反應(yīng)在Controller的狀態(tài)面板上和Analysis統(tǒng)計(jì)結(jié)果中
僅僅通過(guò)腳本函數(shù)執(zhí)行結(jié)果來(lái)決定整個(gè)腳本的成功/失敗,這太草率了,因?yàn)槟_本往往是在執(zhí)行一個(gè)業(yè)務(wù)流程,VU腳本函數(shù)本身就是協(xié)議級(jí)的,它執(zhí)行的失敗會(huì)引起整個(gè)業(yè)務(wù)的失敗,但它運(yùn)行成功卻未必意味著業(yè)務(wù)會(huì)成功
檢查點(diǎn),并不是一個(gè)LoadRunner里專有的概念。在WinRunner和QTP中就有檢查點(diǎn),對(duì)于自動(dòng)化測(cè)試來(lái)講,檢查點(diǎn)是一個(gè)很重要的功能,它的作用是驗(yàn)證程序的運(yùn)行結(jié)果是否與預(yù)期結(jié)果相符
web_find和web_reg_find函數(shù)兩者有一些差別
1、web_reg_find先注冊(cè)的優(yōu)勢(shì)是腳本能夠一邊接受Server的數(shù)據(jù)緩沖,一邊進(jìn)行查找,提高了查找的效率
2、web_reg_find的參數(shù)與web_find并不完全一樣,其中有個(gè)參數(shù)叫做SaveCount,它能夠記錄查找匹配的次數(shù)。而web_find的機(jī)制是一旦查找匹配成功,就立即返回,并不繼續(xù)查找和記錄匹配次數(shù)
3、VU run time設(shè)置“enable image and text check”對(duì)web_find有效,而對(duì) web_reg_find無(wú)效
檢查點(diǎn)設(shè)置技巧
如何加入檢查點(diǎn),才能檢查出正確的結(jié)果。與事實(shí)相符,這的確有一些技巧:
1、它必須滿足是驗(yàn)證事務(wù)通過(guò)與否的充分必要條件。檢查點(diǎn)通過(guò),我們就能夠確信系統(tǒng)是一個(gè)正常的狀態(tài)
2、檢查點(diǎn)可以是常量,也可以是變量
3、檢查點(diǎn)可以是文本、圖像文件,也可以是數(shù)據(jù)庫(kù)記錄等
高級(jí)——多Action
對(duì)于支持多Action的Vuser,可以把一個(gè)腳本的Action import到另外一個(gè)腳本中。必須要保證這兩個(gè)import的腳本Vuser類型是相同的。注意,被import的Action中的有關(guān)參數(shù)也要一同被improt。選擇被import的腳本,然后選擇被import的Action
1、迭代次數(shù):LoadRunner將按指定的次數(shù)重復(fù)執(zhí)行所有Actions,但不會(huì)重復(fù)Vuser腳本的vuser_init和vuser_end部分
需要注意的是,如果在Controller的計(jì)劃設(shè)置中指定方案持續(xù)時(shí)間,則持續(xù)時(shí)間設(shè)置將覆蓋Vuser迭代設(shè)置。意味著,如果將持續(xù)時(shí)間設(shè)置為5分鐘(默認(rèn)設(shè)置),Vuser將在5分鐘內(nèi)按照需要繼續(xù)運(yùn)行任意多次迭代,即使運(yùn)行時(shí)設(shè)置僅指定一次迭代
2、操作塊:是腳本內(nèi)函數(shù)的組合,每個(gè)塊都有自己的單獨(dú)屬性設(shè)置,包括順序、迭代和權(quán)重??梢酝ㄟ^(guò)單擊“Properties”設(shè)置Block的屬性
3、順序:可以設(shè)置塊內(nèi)腳本的操作順序。有兩種方式:按順序和隨機(jī)執(zhí)行操作
4、迭代:除了為整個(gè)Run部分設(shè)置迭代次數(shù)以外,還可以設(shè)置單個(gè)操作或操作塊的迭代。讀設(shè)置非常有用,例如 可以用模擬一個(gè)商業(yè)站點(diǎn),你在該站點(diǎn)執(zhí)行了多個(gè)查詢查找某個(gè)產(chǎn)品,但只進(jìn)行一次采購(gòu)
高級(jí)——腳本錯(cuò)誤處理機(jī)制
一個(gè)好的腳本應(yīng)該具有健壯性,要能夠捕捉到錯(cuò)誤,并能采取有效的錯(cuò)誤處理方式,否則腳本一旦發(fā)生錯(cuò)誤,唯一的出路就是退出執(zhí)行
VU提供了一套在出錯(cuò)情況下的腳本處理機(jī)制。VU的錯(cuò)誤處理機(jī)制可設(shè)定Vuser在執(zhí)行腳本時(shí)遇到錯(cuò)誤怎樣處理。當(dāng)Vuser遇到錯(cuò)誤時(shí),可以有兩種處理策略:一是停止執(zhí)行腳本,這適用于嚴(yán)重的問(wèn)題。第二種是忽略這個(gè)錯(cuò)誤,繼續(xù)執(zhí)行下去。
使用lr_continue_on_error函數(shù)。通過(guò)lr_continue_on_error函數(shù)可以控制Vuser腳本特定段的錯(cuò)誤處理,標(biāo)記就用lr_continue_on_error(1)和lr_continue_on_error(0)語(yǔ)句將其括起來(lái)
使用lr_continue_on_error函數(shù)的腳本段將會(huì)覆蓋“出現(xiàn)錯(cuò)誤時(shí)仍繼續(xù)”的Run-time Settings運(yùn)行時(shí)設(shè)置
高級(jí)——腳本調(diào)試技巧
解釋性語(yǔ)言的調(diào)試一直是個(gè)棘手的問(wèn)題,如果沒(méi)有專門(mén)的debug工具,只能通過(guò)加入變量輸出語(yǔ)句來(lái)查看每個(gè)變量值的變化,下面是兩種比較常用的調(diào)試腳本的方式,并不是真正意義上的調(diào)試
動(dòng)態(tài)運(yùn)行與非動(dòng)態(tài)運(yùn)行
腳本可以設(shè)置為Animated運(yùn)行模式和非Animated運(yùn)行模式,
在Animated運(yùn)行模式下,VU會(huì)顯亮當(dāng)前正在執(zhí)行的腳本語(yǔ)句??梢酝ㄟ^(guò)VU設(shè)置語(yǔ)句執(zhí)行的延遲時(shí)間,以便觀察每行代碼執(zhí)行的效果
在非Animated運(yùn)行模式下,VU在執(zhí)行腳本時(shí)不會(huì)顯亮語(yǔ)句,而直接執(zhí)行下去。顯然,Animated運(yùn)行模式是我們調(diào)試腳本的一個(gè)很好的方法
日志設(shè)置
對(duì)于軟件開(kāi)發(fā)人員來(lái)講,日志無(wú)疑是跟蹤和調(diào)試最好的線索
1、僅在出錯(cuò)時(shí)發(fā)送消息:指示Vugen僅當(dāng)出錯(cuò)時(shí)記錄log
2、標(biāo)準(zhǔn)日志:創(chuàng)建在腳本執(zhí)行期間所發(fā)送的函數(shù)和消息的標(biāo)準(zhǔn)日志,供調(diào)試時(shí)使用。大型負(fù)載測(cè)試方案應(yīng)禁用該選項(xiàng)
3、擴(kuò)展日志:創(chuàng)建擴(kuò)展日志,包括警告和其他消息。大型負(fù)載測(cè)試方案禁用該選項(xiàng)
可以使用“擴(kuò)展日志”選項(xiàng)指定應(yīng)向擴(kuò)展日志中添加哪些其他信息:
參數(shù)替換:選擇該選項(xiàng)可記錄指定給腳本的所有參數(shù)及其相應(yīng)的值
服務(wù)器返回的數(shù)據(jù):選擇該選項(xiàng)可記錄服務(wù)器返回的所有數(shù)據(jù)
高級(jí)跟蹤:選擇該選項(xiàng)可記錄Vuser在會(huì)話期間發(fā)送的所有函數(shù)和消息。調(diào)試Vuser腳本時(shí),該選項(xiàng)非常有用
VU腳本運(yùn)行成功后,可以創(chuàng)建Controller場(chǎng)景并運(yùn)行場(chǎng)景