性能測試工具原理與架構
在性能測試的學習過程中,堅持思想與工具(分開)并行,當前面世面上的性能測試書籍大多把理論與loadrunner融為一體講解,這樣做是正確的,因為有一些性能名詞概念也源于工具。但是,性能測試不是loadrunner,所有的作者也是這么認為的。但他們在講性能測試的時候講的就是loadrunner有,只是講的多少不同罷啦。
你是否覺得我對loadrunner有仇?我之所以將其分開來學,只是希望自己在學習性能測試的時候不要被loadrunner局限了而已。只是覺得在做性能測試時不要帶loadrunner的思維,這樣更容易把握性能測試的本質(zhì)。
性能測試工具,從廣義上講,在性能測試過程中使用到的所有工具都可以稱其為性能測試工具。從狹義上來講,我們可以把性能測試工具分為服務器端性能測試工具與前段性能測試工具。
服務器端性能測試工具也我們測試人員通常所認為的性能測試工具。LoadRunner、JMeter、SilkPerformance、服務器端壓力性能工具需要支持產(chǎn)生壓力和負載,錄制和生成腳本,設置和部署場景,產(chǎn)生并發(fā)用戶和向系統(tǒng)施加持續(xù)的壓力。
前端性能測試工具應用比較廣泛,開發(fā)人員,前端開發(fā)人員、測試人員都會經(jīng)常用到。Firebug 、fildder2、Yslow 、前端性能測試工具只需要關于心瀏覽器等客戶端工具對具體需要展現(xiàn)的頁面的處理過程。
服務器性能測試工具原理
性能測試工具的主要作用是通過模擬生產(chǎn)環(huán)境中的真實業(yè)務操作,對被測試系統(tǒng)實行壓力負載測試,監(jiān)視被 測試系統(tǒng)在不同業(yè)務、不同壓力性能下的性能表現(xiàn),找出潛在的性能瓶頸進行分析、優(yōu)化。
客戶端與服務器相當于兩個人,通過信息來進行交流。由于初次見面不好意思直接交流,與是找來了中間傳話人,客戶端把信息告訴給傳話人,由傳話人來轉(zhuǎn)達給服務器。那么服務器反饋的信息也由傳話人轉(zhuǎn)達給客戶端。一般性能測試工具都需要錄制或編寫客戶端行為腳本。
這樣傳達人就有了客戶端的行為能力,從而假扮客戶端來欺騙服務器,與之進行通信。有了客戶端行為了傳達人可以進行自我復制。從而變出N多個傳達人對服務器進通信。---這個傳達人的行為和能力也就是性能測試工具的基本特質(zhì)。(突然覺得性能工具像第三者插足,而且是可以自我復制瘋狂變態(tài)的第三者,哈哈?。?/p>
對于目前流行的性能測試工具,他們的基本工作原理都是一致的。在客戶端通過多線程或多進程模擬虛擬用戶訪問,對服務器端施加壓力,然后在過程中監(jiān)控和收集性能數(shù)據(jù)。
性能測試工具應該具備什么的特質(zhì)呢?
1、工具本身占用系統(tǒng)資源少,可擴展性好,可用性強。
2、能模擬真實業(yè)務事務操作,在并發(fā)時能真正產(chǎn)生業(yè)務壓力。(這一點是核心)
3、對壓力測試結果能很好地進行性能分析,快速找出被測試系統(tǒng)的瓶頸。
4、測試腳本的重復性強。
服務器性能測試工具的架構
用戶行為生成部分
我為什么說的這么朦朧,對于熟悉loadrunner的朋友,我說成虛擬用戶腳本生成器,你更容易理解,這個腳本,我們可以錄制,也可以手工編寫。你不要以為這是生成用戶行為的唯一方式。因為在JMeter成中是添加各種組件,通過對組件的配置來完成用戶行為的,當然也可以通過錄制。而在相對簡陋的性能測試工具curl_loader(linux環(huán)境下的運行的),他是通過編寫配置文件的形式來描述用戶形為的。
我前面也有提了,雖然性能測試工具由不同的形式來描述,但他們的原理是一樣的,都是通過Proxy方式來實現(xiàn),具體來說,Proxy作為客戶端和服務器之間的中間人,接收客戶端的數(shù)據(jù)包。
壓力產(chǎn)生器
壓力產(chǎn)生器用于根據(jù)腳本內(nèi)容產(chǎn)生實際的負載,在性能測試工具中,壓力產(chǎn)生器扮演著“產(chǎn)生負載”的角色。也就根用戶的設置,進行自我復制來生成多個客戶端向服務器發(fā)送請求。對于工具來說,每復制出來的一份就是一個進程或線程,進程和線程的運行是要占用系統(tǒng)資源的。所以,對一臺壓力測試機來說能運行的虛擬用戶數(shù)也是有限的。根基測試機的配置而定。那么這個時候就要通過多臺測試機合作,來模擬更多的虛擬用戶向服務器發(fā)請求。
那么,對于性能測試來說,很重要的一點就是產(chǎn)生“并發(fā)”的請求,不然就不會對服務器產(chǎn)生壓力。那多臺機子如何產(chǎn)生“步調(diào)一致”的虛擬用戶呢?使用“用戶代理”
用戶代理
用戶代理是運行在負載機上的進程,該進程與產(chǎn)生負載壓力的進程或線程協(xié)作,接收調(diào)度系統(tǒng)的命令,調(diào)度產(chǎn)生負載壓力的進程或線程,從這個意義上看,用戶代理也是壓力產(chǎn)生器的一部分。
調(diào)度能力
我們在做復雜的性能測試時,常常會設計各種場景,不同的虛擬用戶數(shù),不同事務的用戶比例,運行時間,設置同步點等,這個時候也需要我們的測試工具有壓力調(diào)度能力。從而才能更真實的模擬我們所設計的運行場景。
監(jiān)控系統(tǒng)
監(jiān)控系統(tǒng)是性能測試工具直接與用戶進行交互的主要部分,監(jiān)控系統(tǒng),主要用戶在壓力測試過程中對各種軟硬件進行監(jiān)控,如對數(shù)據(jù)庫、應用服務器,服務器的主要性能表現(xiàn)情況進行監(jiān)控。用于判斷系統(tǒng)當前處于什么狀態(tài)。
當然,監(jiān)控系統(tǒng)不是性能工具必須的部分,可以通過軟硬件系統(tǒng)自身的監(jiān)控工具或者第三方監(jiān)控工具進行監(jiān)控。但是否有強大的性能計數(shù)器監(jiān)控系統(tǒng)是衡量性能測試工具是否強大的指標之一。
壓力結果分析
壓力結果分析工具可以用來輔助進行測試結果的分析,性能測試工具一般都能將監(jiān)控系統(tǒng)獲取的性能技術數(shù)器值生成曲線圖,折線圖等各種圖表。通過展現(xiàn)性能測試過程中的各種參數(shù)指標,來供測試人員進行分析。
但這里需要強調(diào)的是,壓力結果分析工具本身不能代替分析者進行性能結果分析,而只是提供多種不同的數(shù)據(jù)揭示和呈現(xiàn)方法而已。對于這些數(shù)據(jù)進行分析必然要依靠測試工程師對系統(tǒng)性能分析的知識和經(jīng)驗。
對上面介紹的性能測試工具架構的組成部分,不是第一個性能測試工具都具備,而所具備的強大程度也不相同。比如,有些性能測試工具不具備用戶代理能,有些監(jiān)控系統(tǒng)能監(jiān)控的資源很有限或簡陋,有些結果分析數(shù)據(jù)的呈現(xiàn)不夠詳盡等。
原文鏈接:http://www.cnblogs.com/fnng/archive/2012/07/31/2617546.html