對初學LoadRunner朋友的建議

http://blog.sina.com.cn/s/blog_67001b350100ipi4.html

對初學LoadRunner朋友的建議
作者:wind
摘要:隨着Internet的普及與迅速發展,企業業務量的迅速加大,數據大集中成爲一種趨勢,IT系統承載的負荷越來越重,系統性能的好壞嚴重的影響了企業對外提供的服務質量.從而對IT系統的性能進行測試和調優引起企業的重視,進而性能測試工程師成爲IT市場的”香悖悖”,並且性能測試有着極高的技術挑戰.於是吸引了大量的測試愛好者來學這方面的技術,而一談到性能測試很多人便會想到鼎鼎大名的LoadRunner這款優秀的性能測試工具,然而到這裏問題就產生了?
關建字:LoadRunner 性能測試 網絡基礎編程語言 數據庫操作系統
LoadRuner與性能測試的關係:LoadRunner初學者的誤點:把LoadRunner神化了.很多初學LoadRunner的朋友認爲掌握了使用LoadRunner這款性能測試工具,就能夠做性能測試了.常在網上看到好多人在學習怎麼去使用這款優秀的性能測試工具,本來學習怎麼去使用LoadRunner這個工具沒有錯,卻把LoadRunner神化了,”天真的”以爲它什麼都能做,以爲學會了LoadRunner的使用就能做性能測試了.儘管用了大量的時間學會了如何使用LoadRunner錄製腳本,如何進行關聯,如何進行參數化,如何設置集合點等等?可到頭來,性能測試還是不會做.爲什麼?對於產生的性能報告不知道怎麼去分析?不知道如何利用得到的分析報告分析出系統存在的瓶頸?不知道如何進行性能調優?像這些事光會使用LoadRunner是做不到的?說白了LoadRunner只是我們做性能測試的一個工具,它並不是萬能的,是死的,具體怎麼做還得依靠人去操作與分析.會使用LoadRunner的人,並不一定會做性能測試,會做性能測試的人並不一定都會使用LoadRunner.LoadRunner只是一個性能測試工具而已.我們應該意識到,測試工具只是性能測試中的一部分,僅是爲達到性能測試目的而採用的一種手段

性能測試與系統性能的關係:高性能,高安全的系統,不是測試出來的,而是構架,設計,編寫出來的.當然在這裏我並不否認性能測試的重要性,甚至可以說沒有經過性能測試的系統,一定不會是優秀的系統,軟件是人開發出來的,而人總是會出錯的,所謂智者千慮,必有一失……要想做好性能測試,在軟件系統需求,設計,編寫代碼的這些階段就應該進行性能測試,而不僅僅是系統測試這個階段纔去做性能測試,性能測試應該貫穿於整個軟件開發週期中.


對初學LoadRunner朋友的建意:常看到網上一些網友發貼子問,怎麼對性能測試產生的結果進行分析?測試系統時怎麼去選擇合適的協議?對於發這些貼子的人我想請問你?你能夠詳細的說下HTTP協議嗎?TCP建立連接和釋放連接的過程是怎樣進行的?什麼是協議?協議是用來做什麼的?在OSI參考模型中各層的作用?數據庫中產生併發的衝突的原因?不要太依賴於LoadRunner工具本身的學習,而去忽略計算機其它基礎知識的學習,我們更應該去掌握一門編程語言,良好的網絡基礎知識,計算機原理與操作系統知識,數據庫知識.這些是我們去學習怎麼去使用LoadRunner前提與基礎。.
1爲什麼要掌握一門編程語言
其一,大家在使用LoadRunner時常會遇到一些不能錄製腳本的情況發生,或者需要錄製一些複雜的腳本,這時候我們就必須手動的開發腳本.其二LoadRunner雖然強大,易於使用,可是它卻屬於商業軟件,價格昂貴,並且代碼不開源,我們無法瞭解LoadRunner具體的實現細節,甚至我們會懷疑LoadRunner收集的性能數據準確嗎?它有是如何實現的等等,而這些我們通過LoadRunner的幫助文檔無法得知.性能測試工具並不只有LoadRunner,做性能測試還有許多優秀的性能測試工具可以選擇,像JMeter,Curl-Loader等等這些非常優秀的開源工具,在全能上雖然並不上LoadRunner,但在某些方面卻比LoadRunner還要強大.例如Curl-Loader這個工具,它雖然支持的協議不多,但是對於http協議它最高能產生10萬的併發用戶,這是LoadRunner遠遠所不及的.並且這些工具代碼是公開的,我們能夠從這些代碼中去分析具體實現的細節,並且還可以自已編寫代碼,增強軟件的功能,這也是成爲性能測試高手的一條途徑.LoadRunner好比我們的Windows操作系統,易於使用,功能強大,代碼封閉,論全能比Linux要強大.我們的開源性能測試工具好比Linux操作系統代碼開源,不易於使用,但很多方面比我們的Windows要強大.也許這個時候有人會問對於初學者學哪門語言最好最有前途C,C++,VB,JAVA,C#?其實每一種語言能夠生存下來,自有其生存的道理,每一種語言都有自已優勢和缺點,並且編程語言具有相通信,學好了一門,再去學另外的編程語言,非常快就能上手.對於初學者我建意學習C語言,理由有很多,例如很多優秀的開源性能測試工具就是用C語言開發的….當然不管選擇什麼編程語言,或者數據庫,或者操作系統,我們不要去想學哪門最好,學哪方面最有前途.我們更應該結合自身的情況,選擇最合適的,而不是選擇最好的.
2爲什麼要掌握計算機原理和操作系統知識
論壇上常會看到這些問題?LoadRunner中線程與進程的關係?在什麼時候用到它們,怎麼區別用線程還是進程呢?LoadRunner錄製產生了亂碼怎麼解決?怎麼去發現內存泄漏?對那些發貼問這些問題的朋友,我依然想請問你你知道進程和線程的概念嗎?知道進程有幾種狀態嗎?知道進程間的通信是怎麼進行的嗎?死鎖,進程與線程的區別這些概念你明白嗎?如果你連內存的概念,內存的作用,內存泄露的概念都搞不清楚,你怎麼去發現內存泄露?如果這些你都不知道,自然就不知道怎麼去做性能測試分析?一些網友錄製腳本常常會產生一些莫名奇妙的錯誤?還震震有詞的說這是LoadRunner的原因.其實要說到底要解決這些問題就必需得有良好的計算機原理和操作系統知識.弄清了進程和線程的區別,你自然就明白了使用進程資源使用高,但安全性要強於線程,線程資源利用率少,使用線程能在一個負載生成器上運行更多的Vuser,但可能存在安全問題.LoadRunner錄製產生了亂碼怎麼解決?爲什麼會產生亂碼,你知道什麼是字符集嗎?什麼是編碼嗎?字符串在我們內存中有是如何存放的?ASCII編碼,ANSI編碼,UNICODE編碼它們的區別是什麼?這些都是操作系統的基礎基礎.掌握好了這些你自然明白LoadRunner中產生亂碼的原因.當然計算機原理和操作系統的基礎知識還有很多得掌握的知識.像操作系統的體系架構、操作系統的重要基礎概念,內存管理、存儲/文件系統、驅動/硬件的管理.要做好性能測試計算機原理和操作系統知識必不可少.

3爲什麼要有良好的網絡基礎
經常在51testing論壇中看到很多人發貼子.像LoadRuner中爲什麼要進行關聯?,LoadRunner測試系統時如何選擇協議?LoadRunner中的如何進行IP欺騙?等等.這些問題隨便一搜就能發現大量的貼子,其實說到底這些問題和LoadRunner的關係並不是很大,要去解決這些問題並不在於你對LoadRunner這個工具使用是否熟練,而在於我們網絡基礎知識是否紮實.例如第一個問題LoadRunner中爲什麼要進行關聯?相信很多朋友都知道HTTP協議知道它是超文本傳輸協議,但是對於一些新手往往不能夠詳細的說出HTTP具體的內容,像HTTP工作的原理,HTTP協議爲什麼要使用基於TCP的協議而不使用UDP的協議,HTTP工作在OSI參考模型的哪一層?在HTTP協議上數據是怎麼傳輸的等等.而只有當我們明白了這一切,自然而然就會明白爲什麼要使用關聯,到最後你會發現這些問題其實根LoadRunner關係並不是很大.HTTP協議本質上是無狀態的;對頁面的每個請求都將被視爲新請求,而且默認情況下,來自一個請求的信息對下一個請求不可用.在傳統的 Web 編程中,這通常意味着在每一次往返行程中,與該頁及該頁上的控件相關聯的所有信息都會丟失.例如,如果用戶將信息輸入到文本框,該信息將在從瀏覽器或客戶端設備到服務器的往返行程中丟失,爲了使用瀏覽網頁,頁與頁是相互聯繫不去丟失這些信息,於是了就從現了Cookie,Session,查詢字符串等等保持狀態的技術.什麼是Cookie?什麼是Session?Cookie 和Session 有是怎麼工作的?當我們明白了這些,很多的問題就自然而然的明白了,像這些都是基礎的知識和LoadRunner關係大嗎?不大.Cookie 是一些少量的數據,這些數據存儲在客戶端文件系統的文本文件中,或者存儲在客戶端瀏覽器會話的內存中.Cookie 包含特定於站點的信息(像用戶名密碼以及我們在網站一些個性化的設置等等),這些信息是隨頁輸出一起由服務器發送到客戶端的.如果瀏覽器使用的是cookie,那麼所有的數據都保存在瀏覽器端,比如我們登錄以後,服務器設置了cookie用戶名,那麼當你再次請求服務器的時候,瀏覽器會將用戶名一塊發送給服務器,這些變量有一定的特殊標記.服務器會解釋爲cookie變量,所以只要不關閉瀏覽器,那麼cookie變量一直是有效的,所以能夠保證長時間不掉線..如果設置了的有效時間,那麼它會將 cookie保存在客戶端的硬盤上,下次再訪問該網站的時候瀏覽器先檢查有沒有 cookie,如果有的話,就讀取該 cookie,然後發送給服務器.這些是Cookie的工作過程,常看到論壇上一些朋友發貼子問使用LoadRunner時錄製到了一些Cookie的信息,它是用來做什麼的,看起來很煩可不可以把它刪除掉?明白了這些細節的知識,你自然能明白那個Cookie的信息能不能刪除掉.如果web服務器端使用的是session,那麼所有的數據都保存在服務器上,客戶端每次請求服務器的時候會發送當前會話的SessionId,服務器根據當前SessionId唯一地標識在服務器上包含會話數據的瀏覽器,以確定用戶是否登錄或具有某種權限.不同的用戶發送請求Web服務器會隨機發送一個唯一的SessionID.而我們使用LoadRunner錄製時它會把我們SessionID寫死,所以導致出錯.這時候就得使用關聯了,這樣不僅明白了LoadRunner怎樣使用關聯,而且還明白了爲什麼要使用關聯?對於LoadRunner測試系統時如何選擇協議?這個問題也是網絡論討的比較多的問題.要解決這個問題同樣得依靠我們的紮實的網絡基礎,而不是對LoadRunner使用的熟練程度,首先我們得了解LoadRunner錄製時的工作原理了,LoadRunner的錄製和QTP不一樣,它不關心你的對象識別什麼的,不關心你的什麼界面之類的,不關心你使用什麼語言編寫的,LoadRunner有一個Agent進程,來專門監控客戶端和服務器之間的通信,然後用自己的函數進行錄製.LoadRunner錄製的時候關心的是通信包,是客戶端和服務器之間的數據包.說到這裏,大家就比較清楚了,爲什麼有的時候不能錄製呢?因爲,協議不認識,導致LoadRunner截獲的數據包不能解析,所以錄製下來是空的.所以我們得熟悉什麼是協議,熟悉OSI參考模型,OSI參考模型中各層的作用,TCP協議棧各層的作用,熟悉TCP,UDP,ICMP等等協議.當我們明白了這些網絡的基礎知識後我們自然會明白應該如何去選擇協議.另外關於LoadRunner中的如何進行IP欺騙?要解決這個問題同樣得有良好的網絡基礎知識.其實當我們理解了IP地址的格式,IP地址的分類,子網掩碼的概念,以及知道怎麼去進行非標準子網的劃分方法 ,掌握了這些原理的東西,那麼具體怎麼在LoadRunner中如何進行IP欺騙,就非常簡單了. 當然網絡基礎知識並不只是上面的而已,還包括路由器,交換機,加密技術等等這些基礎的網絡知識,這些遠遠比我們去學習怎麼去使用LoadRunner更重要.
4爲什麼要掌握數據庫知識
數據庫的重要性我想是不言而喻的,性能測試產生的一個非常大的原因是因爲數據大集中的趨勢,測試從某種意義來講就是對數據測試,而我們企業的核心數據是放在數據庫中的.現在大型的WEB應用程序,都採用多層結構,像典型三層,用戶界面層,數據邏輯層,數據層.而數據層,而數據層對我們整個WEB應用程序的性能是非常大的,對數據庫的基礎知識不懂,我們怎麼去進行性能測試分析?怎麼知道確定性能產生的瓶頸是否是數據庫的原因,如何對系統進行調優?例如數據庫模型設計不合理,一條壞的SQL語句就能影響到整個WEB應用程序的性能,所以熟悉SQL語句,建表,索引,存儲過程,事務,觸發器,併發等這些基礎知識是必需得掌握的.


路漫漫其修遠兮,吾將上下而求索:性能測試難點不在於Loadrunner工具本身,難在對整個系統的全局把握,而對全局的把握你就必需得有豐富的知識面.並不是學好了LoadRunner的使用就能做性能測試 .目前,國內性能測試領域正處於起步階段,要做好性能測試還需學習更多的知識,技術性和非技術.性能測試這條路充滿着挑戰,也充滿着機遇.但正如魯迅先生所說這世上本來沒有路,走的人多了,也就成了路.最後祝願喜愛性能測試的愛好這條道路上能夠不鳴則已,一鳴驚人,不飛則已,一飛沖天.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章