




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、LoadRunner自動(dòng)化測(cè)試工具的應(yīng)用(講稿)(由于工作繁忙,時(shí)間倉(cāng)促,講稿均在下班后寫成,加上LR博大精深,本人水平有限,敬請(qǐng)各位提出批評(píng)和建議,文中吸收了深圳軟件測(cè)試論壇兩位板主的觀點(diǎn),在此表示感謝)第一部分:Loadrunner的簡(jiǎn)介 LoadRunner® 是一種預(yù)測(cè)系統(tǒng)行為和性能的工業(yè)級(jí)標(biāo)準(zhǔn)性能測(cè)試負(fù)載測(cè)試工具。通過(guò)以模擬上千萬(wàn)用戶實(shí)施并發(fā)負(fù)載及實(shí)時(shí)性能監(jiān)測(cè)的方式來(lái)確認(rèn)和查找問(wèn)題,LoadRunner 能夠?qū)φ麄€(gè)企業(yè)架構(gòu)進(jìn)行測(cè)試。通過(guò)使用LoadRunner ,企業(yè)能最大限度地縮短測(cè)試時(shí)間,優(yōu)化性能和加速應(yīng)用系統(tǒng)的發(fā)布周期。目前企業(yè)的網(wǎng)絡(luò)應(yīng)用環(huán)境都必須支持大量用戶,網(wǎng)絡(luò)體
2、系架構(gòu)中含各類應(yīng)用環(huán)境且由不同供應(yīng)商提供軟件和硬件產(chǎn)品。難以預(yù)知的用戶負(fù)載和愈來(lái)愈復(fù)雜的應(yīng)用環(huán)境使公司時(shí)時(shí)擔(dān)心會(huì)發(fā)生用戶響應(yīng)速度過(guò)慢,系統(tǒng)崩潰等問(wèn)題。這些都不可避免地導(dǎo)致公司收益的損失。Mercury Interactive 的 LoadRunner 能讓企業(yè)保護(hù)自己的收入來(lái)源,無(wú)需購(gòu)置額外硬件而最大限度地利用現(xiàn)有的IT 資源,并確保終端用戶在應(yīng)用系統(tǒng)的各個(gè)環(huán)節(jié)中對(duì)其測(cè)試應(yīng)用的質(zhì)量,可靠性和可擴(kuò)展性都有良好的評(píng)價(jià)。LoadRunner 是一種適用于各種體系架構(gòu)的負(fù)載測(cè)試工具,它能預(yù)測(cè)系統(tǒng)行為并優(yōu)化系統(tǒng)性能。LoadRunner 的測(cè)試對(duì)象是整個(gè)企業(yè)的系統(tǒng),它通過(guò)模擬實(shí)際用戶的操作行為和實(shí)行實(shí)時(shí)
3、性能監(jiān)測(cè),來(lái)幫助您更快的查找和發(fā)現(xiàn)問(wèn)題。此外,LoadRunner 能支持廣范的協(xié)議和技術(shù),為您的特殊環(huán)境提供特殊的解決方案。Ø 安裝注意事項(xiàng): LR的版本:目前常見(jiàn)的:LR7.0,LR7.51,LR7.6,LR7.8,每個(gè)版本差別蠻大的,大家盡量使用高版本。本文以LR7.8為例。操作系統(tǒng)選擇:LR是個(gè)比較底層的軟件,最好為Windows 2000,因?yàn)閃2k的穩(wěn)定性和兼容性都不錯(cuò),有人把LR裝在WinXp下面,是有問(wèn)題的,出錯(cuò)現(xiàn)象:“應(yīng)用程序正常初始化(0xc0000005)失敗。是由于安裝錯(cuò)誤。在win2003,winXP下安裝LR后會(huì)出現(xiàn)如此情況。License問(wèn)題:LR的li
4、cense是區(qū)分類型的,一般是按協(xié)議和時(shí)間,用戶數(shù)量來(lái)區(qū)分的,比如:License for LoadRunner 7.51 (Type:Global500,Time Limited時(shí)效:1年 ) 就表示支持所有協(xié)議,最大500VU,時(shí)間:1年。三種安裝類型:Standalone Installation,Network Installation,Network Installation and shortcuts四種安裝方式:Typical Installation,Load Generator,MI Listener,Custom Installation我們根據(jù)實(shí)際情況選擇,我用Stand
5、alone Installation和Custom Installation安裝,安裝所有組件。Ø 我現(xiàn)在要用LoadRunner測(cè)一個(gè)C/S系統(tǒng),請(qǐng)問(wèn)該用什么協(xié)議?經(jīng)常有新手問(wèn):為什么我用LR錄完之后VuGen里產(chǎn)生不了腳本?這酒是協(xié)議選擇的問(wèn)題了,LR支持的協(xié)議和應(yīng)用非常廣泛,很少有人能用完這么多協(xié)議,我們就常見(jiàn)的大多數(shù)人用的加以討論:對(duì)于常見(jiàn)的,b/s系統(tǒng),選擇Web( /Html),測(cè)一個(gè)C/S系統(tǒng),根據(jù)C/S結(jié)構(gòu)所用到的后臺(tái)數(shù)據(jù)庫(kù)來(lái)選擇不同的協(xié)議,如果后臺(tái)數(shù)據(jù)庫(kù)是sybase,則采用sybaseCTlib協(xié)議,如果是sql server,則使用MS sql server的協(xié)
6、議,至于oracle 數(shù)據(jù)庫(kù)系統(tǒng),當(dāng)然就使用oracle 2-tier協(xié)議。對(duì)于沒(méi)有數(shù)據(jù)庫(kù)的c/s(ftp,smtp)這些可以選擇windwos wockets協(xié)議。至于其他的ERP,EJB(需要ejbdetector.jar),選擇相應(yīng)的協(xié)議即可.Ø LR的基本原理:通過(guò)Agent進(jìn)程,監(jiān)視各種協(xié)議的client與server端的通訊,用LR的一套C語(yǔ)言函數(shù)來(lái)錄制腳本,所以只要LR支持的協(xié)議,就不會(huì)存在捕捉不到的,這是它與Loadtest,WR,Robot(Gui)錄制腳本的很大一個(gè)區(qū)別。WR必須對(duì)識(shí)別對(duì)象,才能錄制到。然后它調(diào)用這些腳本向服務(wù)器端發(fā)出請(qǐng)求,接受服務(wù)器的返回。至于服
7、務(wù)器內(nèi)部如何處理,它不關(guān)心。Ø 測(cè)試腳本分配所遵循的幾個(gè)原則:1. 腳本是越小越好,就像寫code一樣的,不要太長(zhǎng),盡量做到一個(gè)功能(Transaction)一個(gè)腳本。如果有些功能是連續(xù)的,必須先做上一個(gè),才能工作下一個(gè),那就只好放在一起了。2. 但是要結(jié)合用戶實(shí)際使用情況,一般在一個(gè)系統(tǒng)中是多個(gè)用戶使用多個(gè)功能,某些功能使用的頻率更大一些,我們?cè)阡浿颇_本之前就要設(shè)計(jì)好,某個(gè)腳本會(huì)跑幾個(gè)用戶,一共需要多少個(gè)腳本,能滿足性能測(cè)試的需求3. 有些人喜歡在LR中測(cè)試幾乎所有的功能,其實(shí)這樣不合適,我們把最常用的、使用頻率最高的、最多人用的拿出來(lái)測(cè)試。對(duì)于WEB的程序,對(duì)于你所關(guān)注的內(nèi)容沒(méi)什
8、么影響的操作,你可以不錄制,可以暫停,這需要試的,比如一些查詢,通常,選擇條件的頁(yè)面都可以不錄制,但對(duì)于一些頁(yè)面有可能要傳遞參數(shù),就需要錄制了,這就要自己試了例子:Test case nameVuser numberTotal 50 Vuser numberTotal 20Iteration Test case 1: merchants create schedule and costing sheet104200Test case 2: Merchant run report-5 concurrent users (3 merchants, 2 vendors).51200Test case
9、 3: merchant edit costing sheet FOB and create production schedule94200Test case 4: merchant reply schedule tasks 63300Test case 5: vendor reply schedule tasks73200Test case 6: vendor edit costing sheet73200Test case 7: merchant create topic, vendor reply topic41100Test case 8: imports reply schedul
10、e and do classification.2110第二部分:錄制腳本:錄制腳本前需要理解的幾個(gè)基本概念:1. 事務(wù)(Transaction)事務(wù)(Transaction)是這樣一個(gè)點(diǎn),我們?yōu)榱撕饬磕硞€(gè)action的性能,需要在action的開(kāi)始和結(jié)束位置插入這樣一個(gè)范圍,這樣就定義了一個(gè)transaction,LoadRunner 運(yùn)行到該事務(wù)的開(kāi)始點(diǎn)時(shí),LoadRunner 就會(huì)開(kāi)始計(jì)時(shí),直到運(yùn)行到該事務(wù)的結(jié)束點(diǎn),計(jì)時(shí)結(jié)束。這個(gè)事務(wù)的運(yùn)行時(shí)間在結(jié)果中會(huì)有反映。 插入事務(wù)操作可以在錄制過(guò)程中進(jìn)行,也可以在錄制結(jié)束后進(jìn)行。LoadRunner 運(yùn)行在腳本中插入不限數(shù)量的事務(wù)。比如一個(gè)單據(jù),
11、把從登錄到保存成功退出整個(gè)作為一個(gè)腳本,對(duì)于需要關(guān)注的保存,輸入的幫助定義為單獨(dú)的事務(wù),以取得響應(yīng)時(shí)間,需要響應(yīng)時(shí)間的設(shè)事務(wù)腳本中事務(wù)的代碼如下:2. 集合點(diǎn)(Rendezvous)集合點(diǎn):是一個(gè)并發(fā)訪問(wèn)的點(diǎn),在測(cè)試計(jì)劃中,可能會(huì)要求系統(tǒng)能夠承受1000 人同時(shí)提交數(shù)據(jù),在LoadRunner 中可以通過(guò)在提交數(shù)據(jù)操作前面加入集合點(diǎn),這樣當(dāng)虛擬用戶運(yùn)行到提交數(shù)據(jù)的集合點(diǎn)時(shí),LoadRunner 就會(huì)檢查同時(shí)有多少用戶運(yùn)行到集合點(diǎn),如果不到1000 人,LoadRunner 就會(huì)命令已經(jīng)到集合點(diǎn)的用戶在此等待,當(dāng)在集合點(diǎn)等待的用戶達(dá)到1000 人時(shí),LoadRunner 命令1000 人同時(shí)去提
12、交數(shù)據(jù),并發(fā)訪問(wèn)的目的。注意:集合點(diǎn)經(jīng)常和事務(wù)結(jié)合起來(lái)使用,常放在事務(wù)的前面,集合點(diǎn)只能插入到Action 部分,vuser_init和vuser_end 中不能插入集合點(diǎn)。集合點(diǎn)函數(shù)如下:加入集合點(diǎn)之后,在后面運(yùn)行過(guò)程中可以看到VU的狀態(tài),會(huì)等待集合。3. IP Spoofer(IP 欺騙) 當(dāng)運(yùn)行場(chǎng)景時(shí),虛擬用戶使用它們所在的Load Generator 的固定的IP 地址。同時(shí)每個(gè)Load Generator 上運(yùn)行大量的虛擬用戶,這樣就造成了大量的用戶使用同一IP 同時(shí)訪問(wèn)一個(gè)網(wǎng)站的情況,這種情況和實(shí)際運(yùn)行的情況不符,并且有一些網(wǎng)站會(huì)根據(jù)用戶IP 來(lái)分配資源,這些網(wǎng)站會(huì)限制同一個(gè)IP
13、的登陸,使用等等。為了更加真實(shí)的模擬實(shí)際情況,LoadRunner允許運(yùn)行的虛擬用戶使用不同的IP 訪問(wèn)統(tǒng)一網(wǎng)站,這種技術(shù)稱為“IP 欺騙”。啟用該選項(xiàng)后,場(chǎng)景中運(yùn)行的虛擬用戶將模擬從不同的IP 地址發(fā)送請(qǐng)求。該選項(xiàng)非常的有用。注意:IP Spoofer 在連接Load Generators 之前啟用。要使用IP 欺騙,各個(gè)Load Generator 機(jī)器必須使用固定的IP,不能使用動(dòng)態(tài)IP(即DHCP)。LoadRunner主要功能是模擬多用戶對(duì)系統(tǒng)進(jìn)行負(fù)載壓力測(cè)試,默認(rèn)情況下,多用戶的生成器都是LocalHost,有些應(yīng)用需要不同的IP訪問(wèn),為了模擬真實(shí)操作,我們還必須模擬多個(gè)IP,IP
14、 Wizard工具就提供了生成多個(gè)ip的功能,IP Wizard是一個(gè)單獨(dú)的程序,我們可以在開(kāi)始菜單里面找到,你可以添加一個(gè)局域網(wǎng)內(nèi)的IP段。添加后重啟,在Win2k下使用Ipconfig/all查看到很多虛擬的IP,最后要在Controller里面選擇enable ip spoofer.4. (Text/Image)檢查點(diǎn)對(duì)于查詢類的腳本,一定要添加檢查點(diǎn),以保證在測(cè)試時(shí)結(jié)果的正確性.因?yàn)長(zhǎng)R只要檢測(cè)到網(wǎng)頁(yè)的響應(yīng),就認(rèn)為是pass而并不管當(dāng)前網(wǎng)頁(yè)內(nèi)容的正確性在進(jìn)行壓力測(cè)試時(shí),為了檢查Web服務(wù)器返回的網(wǎng)頁(yè)是否正確,VuGen允許我們插入Text/Imag 檢查點(diǎn),這些檢查點(diǎn)驗(yàn)證網(wǎng)頁(yè)上是否存在
15、指定的Text或者Image,還可以測(cè)試在比較大的壓力測(cè)試環(huán)境中,被測(cè)的網(wǎng)站功能是否保持正確。檢查點(diǎn)的含義和WinRunner 中的檢查點(diǎn)功能基本上一致,這里就不再作過(guò)多的說(shuō)明。 舉個(gè)例子:當(dāng)我用loadrunner做壓力測(cè)試的時(shí)候,它的確能反饋給我各種服務(wù)器性能的數(shù)據(jù),但是在做B/S結(jié)構(gòu)系統(tǒng)的測(cè)試的時(shí)候,去發(fā)現(xiàn)如下問(wèn)題:loadrunner不能正確判斷操作是否成功,比如登錄,我要測(cè)試200人同時(shí)登錄,但是我的login.jsp里面沒(méi)有正確的關(guān)閉數(shù)據(jù)庫(kù)的連接,導(dǎo)致登錄100人后,建立了100個(gè)數(shù)據(jù)庫(kù)連接,第101一個(gè)人登錄的時(shí)候,由于超出數(shù)據(jù)庫(kù)連接的最大數(shù),所以,jsp程序拋出了一個(gè)數(shù)據(jù)庫(kù)異常
16、。但是頁(yè)面的走向是正確的,所以loadrunner會(huì)認(rèn)為程序是正確執(zhí)行的,但是事實(shí)卻并非如此5. LR腳本復(fù)用問(wèn)題 作為一款優(yōu)秀的負(fù)載測(cè)試工具,LR的測(cè)試腳本有很好的復(fù)用性,參數(shù)化后的腳本,在應(yīng)用沒(méi)什么大的變化的情況下,一直是可以用的。甚至你在A服務(wù)器錄制的腳本,如果做測(cè)試的時(shí)候,需要轉(zhuǎn)移到B服務(wù)器上,你只需要用查找替換的功能將A服務(wù)器的IP地址換成B服務(wù)器就可以使用。6. 理解Correlation(關(guān)聯(lián))關(guān)聯(lián)是用來(lái)解決腳本中存在的動(dòng)態(tài)數(shù)據(jù)問(wèn)題的.在7.8中,當(dāng)你回放一次后,LR會(huì)自動(dòng)錄找你錄制的時(shí)候和回放時(shí)候的差別,找出動(dòng)態(tài)數(shù)據(jù),并作成參數(shù)。舉個(gè)我作的動(dòng)態(tài)數(shù)據(jù)的例子,當(dāng)用戶登錄時(shí),會(huì)產(chǎn)生一
17、個(gè)Sessionid號(hào),訪問(wèn)結(jié)束后,該Sessionid便會(huì)失效。我錄制的時(shí)候,在腳本里面獲取到了該Sessionid,但當(dāng)我再回放的時(shí)候,這個(gè)Sessionid已經(jīng)無(wú)效了,所以,我需要把這個(gè)Sessionid作為一個(gè)動(dòng)態(tài)數(shù)據(jù),當(dāng)我一登錄的時(shí)候,便獲取一個(gè)新的有效的Sessionid,然后通過(guò)web_reg_save_param("WCSParam_Text2","LB=ProcessID=","RB=;","Ord=1","RelFrameId=1","Search=body&quo
18、t;,LAST);函數(shù)把它保存下來(lái)。那么后面用到的頁(yè)面中就可以調(diào)用WCSParam_Text2這個(gè)參數(shù)使用這個(gè)新的Sessionid號(hào)。這是個(gè)動(dòng)態(tài)數(shù)據(jù)很典型的例子,web_submit_data("w_onload_check.asp","Action= :/gsserver3/cwbase/sys/userlogin/w_onload_check.asp","Method=POST","TargetFrame=","RecContentType=text/html","Referer
19、= :/gsserver3/cwbase/sys/userlogin/index.asp","Snapshot=t3.inf","Mode=HTML",ITEMDATA,"Name=hdclentip", "Value=chenjing", ENDITEM,"Name=hdProcessID", "Value=F8E5ACCD372845C38C7E1981A342F703", ENDITEM,"Name=selInstanceid", &quo
20、t;Value=T01", ENDITEM,"Name=TxtUserID", "Value=RYBH", ENDITEM,"Name=TxtPassword", "Value=cwpass", ENDITEM,"Name=Txtkjdate", "Value=2003.01.06", ENDITEM,"Name=selInstancetxt", "Value=性能測(cè)試用(中型數(shù)據(jù)庫(kù))", ENDITEM,"Name
21、=selInstance", "Value=T01", ENDITEM,LAST);web_url("loginpage.aspx","URL= :/gsserver3/cwbase/sys/menushow/loginpage.aspx?ProcessID=WCSParam_Text2","TargetFrame=","Resource=0","RecContentType=text/html","Referer=","Snapsho
22、t=t4.inf","Mode=HTML",LAST);左邊界,右邊界到底是個(gè)什么概念,理解web_reg_save_param函數(shù),int web_reg_save_param (const char *ParamName, <List of Attributes>, LAST);第一部分:參數(shù)名字,用雙引號(hào)括起,逗號(hào)分開(kāi);第二部分:List of Attributes,包括:LB、RB、RelFrameID、Ord、Search、SaveOffset、SaveLen等,第三部分:LAST,結(jié)束標(biāo)志。LB是左邊界,RB是右邊界,比如說(shuō)吧,程序中有這么
23、一個(gè)賦值,ProcessID =A53625E18440FCE81F26DCE712E65EBA;如果ProcessID的值是動(dòng)態(tài)的,我想使用動(dòng)態(tài)變量,那我設(shè)定查找左邊界為L(zhǎng)B=ProcessID=,右邊界為;的字符,如果找到了,就替換成變量.Search是指查找范圍,就是說(shuō)在哪里查找這些值,可以取這樣幾個(gè)值,我們一般設(shè)為ALL,Body等即可。Headers (Search only the headers),Body (search only Body data, not headers),Noresource (search only the html body, excluding a
24、ll headers and resources),ALL (search Body and headers). The default value is ALL.RelFrameID: The hierarchy level of the HTML page relative to the requested URL.一般取1ORD: This parameter, also known as Instance, indicates the ordinal or instance of the match. 一般取 1LR7.8已經(jīng)為用戶定義好了很多類型的關(guān)聯(lián),我們可以自己定義New rul
25、e,不過(guò)我在錄制腳本的時(shí)候一般把系統(tǒng)的那些都關(guān)掉,定義自己的,只是有的時(shí)候,它不能自動(dòng)關(guān)聯(lián),就干脆手工作了。需要關(guān)聯(lián)的地方:一般是在有主鍵,不允許記錄重復(fù),和一些主程序中傳遞過(guò)來(lái)的參數(shù),在后面要用到等情況才使用關(guān)聯(lián)的,你可以先執(zhí)行一遍,如果有些地方不允許重復(fù)可參數(shù)值無(wú)效,就會(huì)出錯(cuò)的,根據(jù)錯(cuò)誤提示你可以判斷出來(lái),就知道需要關(guān)聯(lián)了。一般需要關(guān)聯(lián)的不多,我現(xiàn)在遇到的就是進(jìn)程號(hào),以及表的主鍵。我這里有個(gè)Correlation的官方文檔,大家下去可以自己看看。Ø 以錄制Web( /Html)協(xié)議為例講述一下LR的腳本的錄制LR的腳本是C語(yǔ)言代碼,LR有自己的一整套函數(shù)接口,可以供外部調(diào)用,在V
26、UGen里面敲Lr_就可以看到了。Web( /Html),腳本本身分INIT,ACTION,END三部分,各部分的解釋:INIT部分可以理解為初始部分,ACTION可以理解為事務(wù)部分,也是測(cè)試的主體,END是退出結(jié)束。重復(fù)的時(shí)候,僅重復(fù)action部分。我們一般把登錄部分放在init,退出放到end,只會(huì)執(zhí)行一次,或者有的時(shí)候,各部分反復(fù)的次數(shù)不一樣,分成多個(gè)action,可以單獨(dú)設(shè)定反復(fù)次數(shù)。(如果需要在登陸操作設(shè)集合點(diǎn),那么登陸操作也要放到Action 中,因?yàn)関user_init 中不能添加集合點(diǎn))Init,login#include "web_api.h"#incl
27、ude "lrw_custom_body.h"vuser_init()/登錄的腳本可以放在這里1. 錄制前的選項(xiàng)設(shè)置:解釋:1.基于瀏覽器的應(yīng)用程序推薦使用HTML-based Script, 腳本中采用HTML 頁(yè)面的形式來(lái)表示,這種方式的Script 腳本容易維護(hù),容易理解。2不是基于瀏覽器的應(yīng)用程序推薦使用URL-based Script,腳本中的表示采用基于URL 的方式,不是很好閱讀。解釋:1.是否記錄錄制過(guò)程中的ThinkTime,如果記錄,還可以設(shè)置最大值,一般我不記錄這個(gè)值。2通知Vugen去重新設(shè)置每個(gè)action之間的 context,缺省是需要的。3完
28、整記錄錄制過(guò)程的log,4保存一個(gè)本地的snapshot,可以加速顯示5把html的title放到web_reg_find函數(shù)里面6.支持的字符集標(biāo)準(zhǔn)7 header的錄制,我們采用缺省即可,不需要用web_add_header去錄制非標(biāo)準(zhǔn)的header信息。對(duì)錄制的content的內(nèi)容進(jìn)行filter,不作為resource處理的。解釋:這個(gè)就是我么前面提到的關(guān)聯(lián),系統(tǒng)已經(jīng)預(yù)先設(shè)置好了一些常見(jiàn)的關(guān)聯(lián)rules,我們錄制腳本之前,可以把系統(tǒng)的都關(guān)掉,定義自己的,只是有的時(shí)候,它不能自動(dòng)關(guān)聯(lián),就干脆手工關(guān)聯(lián)。這里比較重要,我還有一個(gè)專門的PPT文檔是詳細(xì)講這個(gè)的,大家可以到我的網(wǎng)站上下載。2.
29、現(xiàn)在可以開(kāi)始錄制腳本了,我給出幾段已經(jīng)錄制好的腳本。lr_rendezvous("createpreproduction schedule ");lr_start_transaction("create pre production schedule");web_url("Folder.jsp_4","URL= ://xpc71/jsp/com/folder/Folder.jsp","Resource=0","RecContentType=text/html&qu
30、ot;,"Referer= ://xpc71/LoginAction.do","Snapshot=t10.inf","Mode=HTML",LAST);web_url("TemplateAdminAction.do","URL= ://xpc71/TemplateAdminAction.do?forwardID=1","Resource=0","RecContentType=text/html","Re
31、ferer= ://xpc71/LoginAction.do","Snapshot=t11.inf","Mode=HTML",LAST);/可以自己手工,也可以讓correlate定義一個(gè)動(dòng)態(tài)參數(shù)web_reg_save_param( "WCSParam_Diff2", "LB= name='", "RB='", "Ord=7", "Search=Body", "RelFrameId=1"
32、, LAST );web_submit_form("ScheduleCreationAction.do","Snapshot=t12.inf",ITEMDATA,"Name=PTName", "Value=schedule_name", ENDITEM,"Name=headerTempID", "Value=preProductionHeaderTemplate", ENDITEM,"Name=selectHeader", "Value=1&qu
33、ot;, ENDITEM,"Name=schTempID", "Value=preProductionDetailTemplate", ENDITEM,LAST);web_url("Folder.jsp_5","URL= ://xpc71/jsp/com/folder/Folder.jsp","Resource=0","RecContentType=text/html","Referer= ://xpc71/LoginAc
34、tion.do","Snapshot=t13.inf","Mode=HTML",LAST);lr_end_transaction("create pre production schedule", LR_AUTO);lr_rendezvous("createcs");lr_start_transaction("create cs");web_submit_data("CostingPreCreateAction.do","Action= :/172.17.
35、16.5/xpc71/CostingPreCreateAction.do","Method=POST","RecContentType=text/html","Referer= ://xpc71/ScheduleCreationAction.do","Snapshot=t14.inf","Mode=HTML",ITEMDATA,"Name=scheduleID", "Value=schedule_id", ENDITEM,&
36、quot;Name=scheduleName", "Value=schedule_name", ENDITEM,"Name=VS022264", "Value=Spring 2004", ENDITEM,"Name=VS372264", "Value=ANF", ENDITEM,"Name=WCSParam_Diff2", "Value=test001", ENDITEM,"Name=dParentID", "Val
37、ue=", ENDITEM,"Name=itemID", "Value=", ENDITEM,"Name=ifRegen", "Value=Y", ENDITEM,"Name=editable", "Value=true", ENDITEM,"Name=calendar", "Value=", ENDITEM,"Name=respPartyID", "Value=", ENDITEM,&
38、quot;Name=respPartyName", "Value=", ENDITEM,"Name=listParentID", "Value=-1", ENDITEM,"Name=shareParty", "Value=", ENDITEM,LAST);web_url("menuAction.do_3","URL= ://xpc71/menuAction.do?currentMenu=3&operation=changeMe
39、nuOnly","Resource=0","RecContentType=text/html","Referer= ://xpc71/LoginAction.do","Snapshot=t15.inf","Mode=HTML",LAST);web_url("Folder.jsp_6","URL= ://xpc71/jsp/com/folder/Folder.jsp","Resource=0&q
40、uot;,"RecContentType=text/html","Referer= ://xpc71/LoginAction.do","Snapshot=t16.inf","Mode=HTML",LAST);lr_end_transaction("create cs", LR_AUTO);解釋:1.幾個(gè)函數(shù)的解釋:1) int web_url (const char *Name, const char * url, <List of Attributes>, E
41、XTRARES, <List of Resource Attributes>, LAST ); 這個(gè)函數(shù)load 指定的web頁(yè)面 .*Name:頁(yè)面的name;l url:頁(yè)面的url,Resource:指示the URL是否是一個(gè)資源。0,不是,1,是。l RecContentType:錄制腳本過(guò)程中,Header響應(yīng)的類型,e.g. text/html, application/x- javascriptl Referer 參考web頁(yè)的the URL l Snapshot - snapshot 文件名(擴(kuò)展名inf), correlation的時(shí)候要的。l Mod
42、e 錄制的級(jí)別: HTML or l Last- 屬性列表的結(jié)束標(biāo)志。2) int web_submit_data ( const char *StepName,/頁(yè)面文件名 <List of attributes>, ITEMDATA,/Item數(shù)據(jù)<List of data>, EXTRARES, <List of Resource Attributes>, LAST ); 這個(gè)函數(shù)以GET and POST requests發(fā)送form。*StepName:In the following example, the web_submit_da
43、ta function submits a form using the POST method: web_submit_data("customerinfo.asp", "Action= :/lazarus/webflight/customerinfo.asp", "Method=POST", "TargetFrame=",
44、;"EncType=multipart/www-urlencoded" "RecContentType=text/html" ITEMDATA, "name=flight", "value=6593", ENDITEM, "name=reserveFlight", "value=Next >
45、",ENDITEM, LAST); 這是java、JavaScript使用POST方法發(fā)送form的例子lrapi.web.submit_data("Finder.asp", "Action= :/mercury/library/Finder.asp", new String /options "
46、Method=POST", "RecContentType=text/html", "Referer= :/mercury/library/finder.asp", "Mode=HTML" ,
47、 new String /data "Name=BookTitle", "Value=Mansfield Park", lrapi.web.ENDITEM, "Name=AuthorBook", "Value=Austen, Jane&quo
48、t;, lrapi.web.ENDITEM, lrapi.web.LAST ); 3. 腳本的參數(shù)化如果用戶在錄制腳本過(guò)程中,填寫提交了一些數(shù)據(jù),比如創(chuàng)建一個(gè)新的document。這些操作都被記錄到了腳本中。當(dāng)多個(gè)虛擬用戶運(yùn)行腳本時(shí),都會(huì)提交相同的記錄,這樣做會(huì)被應(yīng)用禁止,會(huì)出錯(cuò),這樣也不符合實(shí)際的運(yùn)行情況,而且有可能引起沖突。為了更加真實(shí)的模擬實(shí)際環(huán)境,需要各種各樣的輸入。參數(shù)化輸入是一種不錯(cuò)的方法參數(shù)化包含以下兩項(xiàng)任務(wù): 在腳本中用參數(shù)取代常量值。 設(shè)置參數(shù)的屬性以及數(shù)據(jù)源。參數(shù)化僅可以用于一個(gè)
49、函數(shù)中的參量。你不能用參數(shù)表示非函數(shù)參數(shù)的字符串。另外,不是所有的函數(shù)都可以參數(shù)化的。我舉一個(gè)例子來(lái)說(shuō)明,還是我么上面那個(gè)腳本,web_submit_form("ScheduleCreationAction.do","Snapshot=t12.inf",ITEMDATA,"Name=PTName", "Value=performance0001", ENDITEM,"Name=headerTempID", "Value=preProductionHeaderTemplate"
50、, ENDITEM,"Name=selectHeader", "Value=1", ENDITEM,"Name=schTempID", "Value=preProductionDetailTemplate", ENDITEM,LAST);因?yàn)槊看蝿?chuàng)建文檔的時(shí)候,需要用不同的名字,系統(tǒng)禁止同名,如果同名就回出錯(cuò),所以要把PTName值參數(shù)化,我們只要選中“performance0001”,然后點(diǎn)鼠標(biāo)右鍵, 選擇“Replace with a parameter. ”,出現(xiàn)以下窗口:參數(shù)類型解釋:n DateTime:
51、很簡(jiǎn)單,在需要輸入日期/時(shí)間的地方,可以用DateTime 類型來(lái)替代。其屬性設(shè)置也很簡(jiǎn)單,選擇一種格式即可。當(dāng)然也可以定制格式。n Group Name:暫時(shí)不知道何處能用到,但設(shè)置比較簡(jiǎn)單。在實(shí)際運(yùn)行中,LoadRunner使用該虛擬用戶所在的Vuser Group 來(lái)代替。但是在VuGen 中運(yùn)行時(shí),Group Name將會(huì)是Nonen Load Generator Name:在實(shí)際運(yùn)行中,LoadRunner 使用該虛擬用戶所在LoadGenerator 的機(jī)器名來(lái)代替。n Iteration Number:在實(shí)際運(yùn)行中,LoadRunner 使用該測(cè)試腳本當(dāng)前循環(huán)的次數(shù)來(lái)代替。n R
52、andom Number:隨機(jī)數(shù)。很簡(jiǎn)單。在屬性設(shè)置中可以設(shè)置產(chǎn)生隨機(jī)數(shù)的范圍n Unique Number:唯一的數(shù)。在屬性設(shè)置中可以設(shè)置第一個(gè)數(shù)以及遞增的數(shù)的大小。注意:使用該參數(shù)類型必須注意可以接受的最大數(shù)。例如:某個(gè)文本框能接受的最大數(shù)為99。當(dāng)使用該參數(shù)類型時(shí),設(shè)置第一個(gè)數(shù)為1,遞增的數(shù)為1,但100 個(gè)虛擬用戶同時(shí)運(yùn)行時(shí),第100 個(gè)虛擬用戶輸入的將是100,這樣腳本運(yùn)行將會(huì)出錯(cuò)。注意:這里說(shuō)的遞增意思是各個(gè)用戶取第一個(gè)值的遞增數(shù),每個(gè)用戶相鄰的兩次循環(huán)之間的差值為1。舉例說(shuō)明:假如起始數(shù)為1,遞增為5,那么第一個(gè)用戶第一次循環(huán)取值1,第二次循環(huán)取值2;第二個(gè)用戶第一次循環(huán)取值為6
53、,第二次為7;依次類推。n Vuser ID:設(shè)置比較簡(jiǎn)單。在實(shí)際運(yùn)行中,LoadRunner 使用該虛擬用戶的ID 來(lái)代替,該ID 是由Controller 來(lái)控制的。但是在VuGen 中運(yùn)行時(shí),Vuser ID 將會(huì)是 1。n User Defined Function:從用戶開(kāi)發(fā)的dll 文件提取數(shù)據(jù)。n File:需要在屬性設(shè)置中編輯文件,添加內(nèi)容,也可以從現(xiàn)成的數(shù)據(jù)庫(kù)中取數(shù)據(jù)我們將會(huì)重點(diǎn)介紹這種參數(shù)類型,這也是LR的缺省參數(shù)類型,就是把準(zhǔn)備好的數(shù)據(jù)放在文件或者用sql語(yǔ)句從數(shù)據(jù)庫(kù)中取出來(lái),讓VU來(lái)讀取?!癝elect next row ”有以下幾種選擇:多個(gè)VU如何取值n Seque
54、ntial:按照順序一行行的讀取。每一個(gè)虛擬用戶都會(huì)按照相同的順序讀取n Random:在每次循環(huán)里隨機(jī)的讀取一個(gè),但是在循環(huán)中一直保持不變n Unique :每個(gè)VU取唯一的值。注意:使用該類型必須注意數(shù)據(jù)表有足夠多的數(shù)。比如Controller 中設(shè)定20 個(gè)虛擬用戶進(jìn)行5 次循環(huán),那么編號(hào)為1 的虛擬用戶取前5個(gè)數(shù),編號(hào)為2 的虛擬用戶取6-10 的數(shù),依次類推,這樣數(shù)據(jù)表中至少要有100個(gè)數(shù)據(jù),否則Controller 運(yùn)行過(guò)程中會(huì)返回一個(gè)錯(cuò)誤。n Same Line As 某個(gè)參數(shù)(比如Name):和前面定義的參數(shù)Name 取同行的記錄。通常用在有關(guān)聯(lián)性的數(shù)據(jù)上面。這個(gè)也是很有用的,
55、比如有時(shí)候我們要求指定VU取讀取指定數(shù)據(jù),就可以這樣定義:創(chuàng)建參數(shù)文件,共兩列,假設(shè)userID,DOCID,userid設(shè)定取數(shù)方式是unique,DOCID則設(shè)成the same line as userid,如果第一行數(shù)據(jù)為0001,DOC1,則如果用戶0001登錄成功,在打開(kāi)文檔時(shí),便會(huì)打開(kāi)DOC1文檔?!癠pdate value on”有如下幾種選擇:多次迭代如何取值n once在所有的反復(fù)中都使用同一個(gè)值,n each iteration則每次反復(fù)都要取新值,n each occurrence則只要發(fā)現(xiàn)該參數(shù)就要重新取值,也就是如果一個(gè)action中有多個(gè)該參數(shù),每遇到一個(gè)就要重新
56、取一個(gè)值。第三部分:創(chuàng)建運(yùn)行場(chǎng)景Ø Run-Time Setting:和TD的連接,LR可以很方便的和TD連接,把腳本放在TD中,Ø 場(chǎng)景類型的選擇: 錄制好腳本之后,就可以把腳本加入到場(chǎng)景里面去了,這里首先介紹一下LR的場(chǎng)景類型,LR有2種大的場(chǎng)景類型:1. Manual Scenario:該項(xiàng)要完全手動(dòng)的設(shè)置場(chǎng)景,這項(xiàng)下面還可以設(shè)置為每一個(gè)腳本分配要運(yùn)行的虛擬用戶的百分比,可在Controller的Scenario菜單下設(shè)置。2. GoalOriented Scenario:如果你的測(cè)試計(jì)劃是要達(dá)到某個(gè)性能指標(biāo),比如:每秒多少點(diǎn)擊,每秒多少transactions,能到
57、達(dá)多少VU,某個(gè)Transaction在某個(gè)范圍VU(5001000)內(nèi)的反應(yīng)時(shí)間等等,那么就可以使用面向目標(biāo)的場(chǎng)景。選擇手工場(chǎng)景,添加腳本到場(chǎng)景中,Ø 場(chǎng)景的設(shè)置:Design:設(shè)計(jì)測(cè)試場(chǎng)景的靜態(tài)部分,設(shè)置模擬用戶生成器、模擬用戶數(shù)量、 模擬用戶組等。Run:設(shè)計(jì)測(cè)試的動(dòng)態(tài)部分,主要指添加性能計(jì)數(shù)器,在腳本運(yùn)行的過(guò)程中可以通過(guò)這些計(jì)數(shù)器反饋的數(shù)據(jù)。建立了測(cè)試場(chǎng)景后,我們可以對(duì)Edit Schedule進(jìn)行設(shè)置,設(shè)置測(cè)試開(kāi)始執(zhí)行的時(shí)間,對(duì)于手動(dòng)設(shè)計(jì)的測(cè)試還可以設(shè)定它的持續(xù)時(shí)間,以及何時(shí)起用或禁止調(diào)用模擬用戶。設(shè)置集合點(diǎn)如果在腳本中設(shè)置了集合點(diǎn),還需要在Controller中設(shè)置集合點(diǎn)
58、策略。在菜單中調(diào)出設(shè)置集合點(diǎn)策略的窗口.,腳本運(yùn)行的時(shí)候,在這里可以看到VU的狀態(tài)。設(shè)置集合點(diǎn)策略:如果選擇場(chǎng)景類型為GoalOriented Scenario,添加腳本到場(chǎng)景中,它的場(chǎng)景設(shè)置是這樣的(以上的說(shuō)明是以選擇的目標(biāo)為Virtual Users 時(shí)的)各種目標(biāo)類型的應(yīng)用范圍:Virtual Users Goal如果需要測(cè)試多少人可以同時(shí)運(yùn)行Web 應(yīng)用,那么推薦定義Virtual Users Goal。運(yùn)行定義該目標(biāo)類型的場(chǎng)景和運(yùn)行Manual 類型的場(chǎng)景類似。Hits per Second如果想測(cè)試Web Server 的真正實(shí)力,推薦定義目標(biāo)類型為:Hits per Second
59、、Pages perMinute 或者Transactions per Second,這些類型都需要指定一個(gè)虛擬用戶的最小值和最大值的范圍。Controller 試圖使用最少的虛擬用戶來(lái)達(dá)到定義的目標(biāo)。如果使用最少的用戶,不能達(dá)到目標(biāo),Controller 增加用戶數(shù),直到定義的最大值。如果使用了最多的虛擬用戶數(shù),定義的目標(biāo)還沒(méi)有實(shí)現(xiàn),那么需要增加最大用戶數(shù),重新執(zhí)行場(chǎng)景。Transactions per Second可以選擇一個(gè)在腳本里面已經(jīng)定義好的事務(wù)Transactions Response Time如果想知道在多少用戶并發(fā)訪問(wèn)網(wǎng)站時(shí),事務(wù)的響應(yīng)時(shí)間達(dá)到性能指標(biāo)說(shuō)明書中規(guī)定響應(yīng)時(shí)間的最大
60、值,那么推薦使用Transactions Response Time 類型。指定需要測(cè)試的事務(wù)的名稱,虛擬用戶數(shù)量的最小值和最大值,還有預(yù)先定義好的事務(wù)的響應(yīng)時(shí)間。在場(chǎng)景運(yùn)行中,如果使用了最多的虛擬用戶,還不能達(dá)到定義的最大響應(yīng)時(shí)間,說(shuō)明Web Server 還有能力接納定義的虛擬用戶的最多數(shù)量;如果在使用了部分虛擬用戶,就達(dá)到了定義的最大的響應(yīng)時(shí)間,或者LoadRunner 提示如果使用最多數(shù)量的虛擬用戶時(shí)將要超過(guò)最大響應(yīng)時(shí)間,那么需要重新設(shè)計(jì)或者修補(bǔ)應(yīng)用程序,同時(shí)可能需要升級(jí)Web Server 的軟硬件。Pages per Minute每分鐘多少頁(yè)面Ø 場(chǎng)景的Run Time
61、Setting的設(shè)置:pacing: 每個(gè)虛擬用戶腳本包括三個(gè)部分:vuser_init, Run (Actions), vuser_end. 當(dāng)你運(yùn)行腳本的時(shí)候你能通知,虛擬用戶重復(fù)執(zhí)行run部分,每一個(gè)重復(fù)做為一個(gè)iteration. 注意: vuser_init 和vuser_end 部分是不被重復(fù)的。 Think Time Settings: 虛擬用戶think time仿效一個(gè)真實(shí)用戶在活動(dòng)中等待的時(shí)間,例如:當(dāng)一個(gè)用戶從服務(wù)器接受數(shù)據(jù)的時(shí)候,在響應(yīng)前這個(gè)用戶需要等待數(shù)秒來(lái)接受數(shù)據(jù),這個(gè)被耽擱的時(shí)間就是think time。Error
62、Handling:你能指定一個(gè)虛擬用戶在腳本執(zhí)行期間如何處理錯(cuò)誤,默認(rèn)的,當(dāng)一個(gè)虛擬用戶發(fā)現(xiàn)一個(gè)錯(cuò)誤的時(shí)候,它會(huì)隨著下一次重復(fù)繼續(xù)下去,你能使用這個(gè)設(shè)置來(lái)通知虛擬用戶當(dāng)發(fā)生錯(cuò)誤的時(shí)候是否繼續(xù)執(zhí)行腳本。Ø 這里介紹一下多機(jī)聯(lián)合產(chǎn)生負(fù)載:在安裝loadrunner 的第七步驟,應(yīng)該選擇第2 項(xiàng),如果選擇了第一項(xiàng),就會(huì)有連接失敗的問(wèn)題。重新安裝一下即可。通過(guò)Generator我們可以設(shè)定生成模擬用戶的機(jī)器,這些機(jī)器需要安裝LR Generator,需要運(yùn)行agent進(jìn)程,這些機(jī)器可以是實(shí)際存在的,也可是通過(guò)模擬IP模擬的機(jī)器。模擬IP通過(guò)IP Wiazrd工具生成,在上圖中點(diǎn)擊Add,可以添加模擬的生成器,Connect即可。加入一臺(tái)機(jī)器以后,下面會(huì)有顯示Ø LR對(duì)服務(wù)器(System Resource、DataBase Server、Web Server 等)資源的監(jiān)視。LR只能監(jiān)視它支持
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年農(nóng)村電商農(nóng)產(chǎn)品上行模式與品牌建設(shè)中的農(nóng)產(chǎn)品品牌營(yíng)銷策略創(chuàng)新與實(shí)踐案例報(bào)告
- 機(jī)電運(yùn)輸科科長(zhǎng)安全責(zé)任
- 2025年農(nóng)產(chǎn)品質(zhì)量安全追溯體系在農(nóng)業(yè)可持續(xù)發(fā)展中的角色研究報(bào)告
- 2024-2025學(xué)年期末模擬試卷(含解析)五年級(jí)下冊(cè)數(shù)學(xué)
- 2025年農(nóng)產(chǎn)品質(zhì)量安全追溯體系在農(nóng)產(chǎn)品質(zhì)量安全監(jiān)管中的溯源技術(shù)風(fēng)險(xiǎn)管理報(bào)告
- 2013自考試題及答案
- 5s倉(cāng)庫(kù)考試試題及答案
- 期末考試考前特訓(xùn)卷-2024-2025學(xué)年五年級(jí)下冊(cè)語(yǔ)文 統(tǒng)編版
- 2025年免疫治療在自身免疫性神經(jīng)性疼痛中的應(yīng)用探討
- 腎臟疾病通路選擇策略-洞察及研究
- 醬料生產(chǎn)知識(shí)培訓(xùn)課件模板
- 藥品網(wǎng)絡(luò)銷售監(jiān)督管理辦法培訓(xùn)
- 天車軌道梁加固安全施工方案
- 脫發(fā)介紹演示培訓(xùn)課件
- 初中物理教材插圖原理集錦(回歸教材)
- 腸梗阻護(hù)理查房(小腸減壓管的應(yīng)用)
- 2024屆遼寧省沈陽(yáng)市東北育才校中考沖刺卷物理試題含解析
- 抗菌藥物合理應(yīng)用
- 初中體育籃球雙手胸前傳接球教案
- 中建盤扣式落地卸料平臺(tái)施工方案
- 配電網(wǎng)技術(shù)標(biāo)準(zhǔn)(施工驗(yàn)收分冊(cè))
評(píng)論
0/150
提交評(píng)論