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