|
事務(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ì)有反映。所以 LR 的事務(wù)添加操作就是把測(cè)試所需要關(guān)注的操作定義成事務(wù)告訴 LR,這個(gè)是我想要重點(diǎn)檢測(cè)性能的操作。LR就會(huì)在運(yùn)行過(guò)程中記錄事務(wù)內(nèi)操作的響應(yīng)事件等性能 數(shù)據(jù)。并在 Analysis中以報(bào)告的形式給出統(tǒng)計(jì)結(jié)果。 lr_start_transaction(”SubmitBookData”); /*中間代碼部分*/ lr_end_transaction(”SubmitBookData”, LR_AUTO); 2.1.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í)去提交數(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ù)如下,參數(shù)不能加空格:lr_rendezvous(”SumitQueryData”); 加入集合點(diǎn)之后,在后面運(yùn)行過(guò)程中可以看到VU的狀態(tài),會(huì)等待集合。 2.1.4 IP Spoofer(IP 欺騙) LoadRunner允許運(yùn)行的虛擬用戶使用不同的IP 訪問(wèn)同一網(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)。 IP Wizard工具,添加一個(gè)局域網(wǎng)內(nèi)的IP段。添加后重啟,在Win2k下使用Ipconfig/all查看到很多虛擬的IP,最后要在Controller里面選擇enable ip spoofer. 2.1.5(Text/Image)檢查和 contents check 點(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è)上是否存在指定的Text或者Image,還可以測(cè)試在比較大的壓力測(cè)試環(huán)境中,被測(cè)的網(wǎng)站功能是否保持正確。檢查點(diǎn)的含義和WinRunner 中的檢查點(diǎn)功能基本上一致,這里就不再說(shuō)了. 比如登錄,我要測(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ù)異常。 但是頁(yè)面的走向是正確的,所以loadrunner會(huì)認(rèn)為程序是正確執(zhí)行的,但是事實(shí)卻并非如此。 2.1.6 LR 腳本復(fù)用問(wèn)題 LR的測(cè)試腳本有很好的復(fù)用性,參數(shù)化后的腳本,在應(yīng)用沒(méi)什么大的變化的情況下,一直是可以用的。甚至你在A服務(wù)器錄制的腳本,如果做測(cè)試的時(shí)候,需要轉(zhuǎn)移到B服務(wù)器上,你只需要用查找替換的功能將A服務(wù)器的IP地址換成B服務(wù) 2.1.7 理解 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ù)。 理解web_reg_save_param函數(shù), int web_reg_save_param (const char *ParamName, , LAST); 第一部分:參數(shù)名字,用雙引號(hào)括起,逗號(hào)分開(kāi); 第二部分:List of Attributes,包括:LB、RB、RelFrameID、Ord、Search、SaveOffset、 SaveLen等, 第三部分:LAST,結(jié)束標(biāo)志。 左邊界,右邊界到底是個(gè)什么概念? LB是左邊界,要查找的字符串左面的邊界值,即位于查找字符串的最左邊的字符串,RB是右邊界,要查找的字符串右面的邊界值,即位于查找字符串的最右邊的字符串,比如說(shuō)吧,程 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 all 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. 一般取1 ORD: This parameter, also known as Instance, indicates the ordinal or instance of the match. 一般取 1 一般把系統(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è)例子講解LR,呵呵! 2. 1. 8 以錄制 Web(Http/Html)協(xié)議為例講述一下 LR 的腳本的錄制 LR的腳本是C語(yǔ)言代碼,LR有自己的一整套函數(shù)接口,可以供外部調(diào)用,在VUGen里面敲Lr_就可以看到了。Web(Http/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)) 腳本里面有 2 個(gè)函數(shù),解釋一下:1.幾個(gè)函數(shù)的解釋: 1) int web_url (const char *Name, const char * url, [EXTRARES, ,] LAST ; 這個(gè)函數(shù) load 指定的web 頁(yè)面 . *Name:頁(yè)面的name; url:頁(yè)面的url,Resource:指示the URL 是否是一個(gè)資源。0,不是,1, RecContentType:錄制腳本過(guò)程中,Header 響應(yīng)的類型,e.g. text/html, application/x- javascrīpt Referer – 參考 web 頁(yè)的 the URL Snapshot - snapshot 文件名(擴(kuò)展名inf), correlation 的時(shí)候要的。 Mode – 錄制的級(jí)別: HTML or HTTP Last- 屬性列表的結(jié)束標(biāo)志。
1、 負(fù)載生成器: 負(fù)載生成器是用來(lái)模擬生成虛擬用戶的。 根據(jù)經(jīng)驗(yàn),每生成一個(gè)虛擬用戶,需要花費(fèi)負(fù)載生成器大約 2M 的內(nèi)存空間。通常運(yùn)行 controller的主機(jī)很少用作負(fù)載生成器。負(fù)載生成器的工作多由其他裝有 LR Agent的PC 機(jī)來(lái)?yè)?dān)任。如果負(fù)載生成器內(nèi)存的使用率大于了 70%,負(fù)載生成器就會(huì)變成系統(tǒng)的瓶頸,導(dǎo)致性能測(cè)試成績(jī)下降。這種問(wèn)題需要添加負(fù)載生成器來(lái)解決。一臺(tái) 512M內(nèi)存的 PC 機(jī)大約可以生成 80 個(gè)左右的負(fù)載,而一臺(tái) 256M 內(nèi)存的 PC 機(jī)大約可以生成50到 60 個(gè)左右的負(fù)載。 2、 運(yùn)行[時(shí)間]在加壓完成后: 當(dāng)“運(yùn)行[時(shí)間]在加壓完成后”設(shè)置了以后,原本定義的運(yùn)行時(shí)設(shè)置中的迭代次數(shù)就失效了?;蛘哒f(shuō)加壓 “持續(xù)時(shí)間”的優(yōu)先級(jí)要高于“運(yùn)行時(shí)設(shè)置”。比如當(dāng)一個(gè)腳本設(shè)置了運(yùn)行時(shí)設(shè)置中的迭代次數(shù)為 10 次,在“持續(xù)時(shí)間”中設(shè)置加壓持續(xù)時(shí)間為 30分鐘。當(dāng)真正運(yùn)行時(shí),腳本迭代10 次后僅花費(fèi)了20分鐘,但是持續(xù)時(shí)間設(shè)了30 分鐘,因此它不能停下來(lái),還會(huì)繼續(xù)迭代。到最后腳本實(shí)際迭代的次數(shù)就不止 10次了。
LR只能監(jiān)視它支持的服務(wù)器的資源,它支持大部分常見(jiàn)的服務(wù)器。 System Resource:包括windows平臺(tái),Unix平臺(tái)等 Web Server:包括Apache、IIS、Sun的iplanet等 Application server:包括Weblogic、WebSphere等 Database server:包括DB2,Oracle,Sql server,Sybase等 Java: ejb,J2ee等,需要一個(gè)ejbdetector.jar文件 1.對(duì)Windows(Win2k server)的監(jiān)視: 對(duì)windows的監(jiān)視相對(duì)比較簡(jiǎn)單,監(jiān)視前首先需要用有管理員權(quán)限的賬號(hào)連接被監(jiān) server,例如:net use\\qa-test/user:donny ,輸入密碼。然后就可以添加計(jì)數(shù)器, 比較常用的計(jì)數(shù)器有: Memory:Available Mbytes 物理內(nèi)存的可用數(shù)(單位 Mbytes)至少要有10% 的物理內(nèi)存值 Processor:%Processor Time CPU 使用率。這是查看處理器飽和狀況的最佳計(jì)數(shù)器。顯示所有 CPU 的線程處理時(shí)間。如果一個(gè)或多個(gè)處理器的該數(shù)值持續(xù)超過(guò) 90%,則表示此測(cè)試的負(fù)載對(duì)于目前的硬件過(guò)于沉重。為多處理器服務(wù)器添加該計(jì)數(shù)器的 0 到 x 個(gè)實(shí)例。 Processor Queue Length:是指處理列隊(duì)中的線程數(shù),小于2。處理器瓶頸會(huì)導(dǎo)致該值持續(xù)大于2。 Context Switches/sec:如果切換次數(shù)到5000*CPU個(gè)數(shù)和10000*CPU個(gè)數(shù)中,說(shuō)明它忙于切換線程 Network Interface:Bytes Total/sec 為發(fā)送和接收字節(jié)的速率,包括幀字符在內(nèi)。判斷網(wǎng)絡(luò)連接速度是否是瓶頸,可以用該計(jì)數(shù)器的值和目前網(wǎng)絡(luò)的帶寬比較。 SQL Server2000:%Processor Time,CPU 使用率 General Statistics,Logins/sec,這是每秒登錄到 SQL Server 的計(jì)數(shù)。 SQL Statistics: Batch Requests/sec,每秒收到的 Transact-SQL 命令批數(shù)。這一統(tǒng)計(jì)信息受所有約束(如I/O、用戶數(shù)、高速緩存大小、請(qǐng)求每秒收到的 Transact-SQL 命令批數(shù)。這一統(tǒng)計(jì)信息受所有約束(如I/O、用戶數(shù)、高速緩存大小、請(qǐng)求的復(fù)雜程度等)影響。 批請(qǐng)求數(shù)值高意味著吞吐量很好。 2.對(duì)Unix(Linux等)的監(jiān)視,需要配置相應(yīng)的服務(wù)器端,可以查看幫助文件,這里就只舉 一個(gè)例子了。 1) LoadRunner 如何監(jiān)控Apache,需要修改apache的配置文件httpd.conf.
Order deny,allow Allow from all Allow from .your-domain.com
頁(yè)面分解 如果某個(gè)transaction的時(shí)間過(guò)長(zhǎng),為了分析問(wèn)題出在哪里?就可以利用頁(yè)面分解了,它可 以把每個(gè)頁(yè)面分解成: DNS解析時(shí)間:瀏覽器訪問(wèn)一個(gè)網(wǎng)站的時(shí)候,一般用的是域名,需要dns服務(wù)器把這個(gè)域名解析為IP,這個(gè)過(guò)程就是域名解析時(shí)間,如果我們?cè)诰钟蚓W(wǎng)內(nèi)直接使用IP訪問(wèn)的話,就沒(méi)有這個(gè)時(shí)間了。 Connection:解析出Web Server 的IP地址后,瀏覽器請(qǐng)求被送到了Web Server,然后瀏覽器和Web Server 之間需要建立一個(gè)初始化HTTP連接,服務(wù)器端需要做2件事:一是接收請(qǐng)求,二是分配進(jìn)程,建立該連接的過(guò)程就是connection時(shí)間。 First Buffer:建立連接后,從Web Server 發(fā)出第一個(gè)數(shù)據(jù)包,經(jīng)過(guò)網(wǎng)絡(luò)傳輸?shù)娇蛻舳?,瀏覽器成功接受到第一字節(jié)的時(shí)間就是First Buffer。這個(gè)度量時(shí)間不僅可以表示W(wǎng)eb Server 的延遲時(shí)間,還可以表示出網(wǎng)絡(luò)的反應(yīng)時(shí)間。 Receive:從瀏覽器接收到第一個(gè)字節(jié)起,直到成功收到最后一個(gè)字節(jié),下載完成止,這段時(shí)間就是receive時(shí)間。 其他的時(shí)間還有SSL Handshaking(SSL 握手協(xié)議,用到該協(xié)議的頁(yè)面比較少)、 ClientTime(請(qǐng)求在客戶端瀏覽器延遲的時(shí)間,可能是由于客戶端瀏覽器的think time 或者客戶端其他方面引起的延遲)、Error Time(從發(fā)送了一個(gè)HTTP 請(qǐng)求,到Web Server發(fā)送回一個(gè)HTTP 錯(cuò)誤信息,需要的時(shí)間) 為了確認(rèn)問(wèn)題緣由到底是服務(wù)器還是網(wǎng)絡(luò),選擇“Time to First Buffer(緩沖器) Breakdown”發(fā)現(xiàn)network時(shí)間比Server時(shí)間要高的多,從而確定問(wèn)題是network引起的。 |
|
|
來(lái)自: 成長(zhǎng).... > 《測(cè)試》