XMeter之性能測試持續(xù)集成

? ? ? ?隨著DevOps理念越來越深入人心,持續(xù)集成,持續(xù)部署已經(jīng)成為很多公司技術團隊努力追求,且不斷完善的目標。在持續(xù)集成和持續(xù)部署的流程中,自動構建和自動部署一般是技術團隊選擇優(yōu)先實現(xiàn)的目標。有了持續(xù)交付的流水線,我們要關心的就是流水線上產(chǎn)品的質量了。從代碼編譯打包前的單元測試,代碼掃描測試,到構建后的功能測試,接口測試,UI測試,安全測試等都有一些社區(qū)和商業(yè)解決方案。

除了以上這些測試以外,性能測試往往是技術團隊比較靠后去考慮放到持續(xù)交付流水線上的一環(huán)。和很多團隊溝通過這個問題,總結起來原因有以下幾個:

1.團隊對性能測試重視不足,往往到了上線之前才想到要對系統(tǒng)性能做一個全面的了解。聽起來這好像是一個很初級的問題,但是這確實真實存在于很多公司中的現(xiàn)象,尤其是一些快速發(fā)展的初創(chuàng)公司,很多時候系統(tǒng)的性能瓶頸都是直接在生產(chǎn)環(huán)境由用戶發(fā)現(xiàn)的。所以往往性能測試的需求都是在真實業(yè)務中受挫后才提到日程上來。

2.性能測試,尤其是服務器端的集成環(huán)境性能測試準備環(huán)境往往比較復雜。即使已經(jīng)有了比較成熟的被測系統(tǒng)自動部署,測試環(huán)境的準備也是很讓人頭疼的,尤其是被測系統(tǒng)承壓能力比較強的,需要進行大并發(fā)性能測試的團隊,比如一些電商,物聯(lián)網(wǎng)公司。我們經(jīng)常可以看到一個測試團隊為了做一次大規(guī)模的性能測試,首先花幾天的時間準備測試機,安裝測試工具配置集群;再花一些時間配置監(jiān)控系統(tǒng)。測試過程中一旦某臺測試機出現(xiàn)狀況,測試白做了是不可避免的,關鍵是有時候你還不知道哪臺測試機出問題了(比如cpu爆了,內(nèi)存不夠了,網(wǎng)路出了問題等等)。當你拿到了一些很不可思議的測試結果時內(nèi)心一定是崩潰的….

3.如果團隊希望能夠做到持續(xù)測試,也就是在每一個版本發(fā)布過程中都能夠有性能測試覆蓋,維護一整套測試環(huán)境并保證它在每次自動化測試過程中都能正常工作也是必不可少的工作。這往往比重新搭建一套新的測試環(huán)境更讓人頭疼,比如隔壁老王有天突然手頭緊偷偷借走了一臺測試機。

4.性能測試不像功能性測試,比較容易對測試結果進行分析。比如Unit Test,或者接口測試,只要驗證點寫的沒問題,對就是對,錯就是錯,沒啥可說的。而性能測試卻不是非黑即白的,首先性能指標有很多,要統(tǒng)籌的去看待這些結果綜合分析才能給出有意義的結論。即使發(fā)現(xiàn)有明顯問題,想定位問題也是很考驗測試人員的功力的。在和很多團隊聊天過程中經(jīng)常聽到他們說,每次大版本發(fā)布能做一次比較完整的性能測試就不錯了,還持續(xù)集成?那還不得累死….

? ? 把性能測試包含在持續(xù)集成流水線中真的很難么?也不盡然。當一個技術團隊滿足一些基本前提條件,然后設定相對合理和明確的目標,再結合工具的支撐,這件事情就沒那么困難了。

? ? 前提條件標準化的測試環(huán)境自動部署:有穩(wěn)定的產(chǎn)品持續(xù)部署能力。當一個技術團隊還沒有一個比較穩(wěn)定的持續(xù)集成框架來實現(xiàn)持續(xù)部署的時候,考慮引入性能測試是不太現(xiàn)實的。畢竟我們做性能測試的前提是有一個可持續(xù)部署的被測系統(tǒng)。這是一個比較理想的被測系統(tǒng)環(huán)境:


這里有3類環(huán)境:

? ? 模塊級測試環(huán)境:我們在這個階段的測試目的是測試模塊層面的接口性能,保證模塊單接口更新或者新增后性能沒有問題。這個環(huán)境可以不是一個完整的系統(tǒng),只包含模塊級別開發(fā)團隊負責的模塊,但是一定是一個可運行可測試的環(huán)境。這個層面的性能測試更關注模塊層面的接口性能測試,環(huán)境部署規(guī)模一般是單節(jié)點小規(guī)模。

? ? 集成測試環(huán)境:我們在這個階段的測試目的是測試系統(tǒng)集成環(huán)境的整體性能。如果被測系統(tǒng)是一個分布式,可擴展的架構,在這個環(huán)境中可以是單節(jié)點或者是少量的分布式環(huán)境。但是一定要保證這個環(huán)境是個基本完整的系統(tǒng),這樣我們才能端到端的測試系統(tǒng)性能。

? ? 準生產(chǎn)環(huán)境:這個環(huán)節(jié)基本是模擬生產(chǎn)環(huán)境的配置和規(guī)模,有的公司甚至可以用此環(huán)境和生產(chǎn)環(huán)境進行切換來進行系統(tǒng)升級。在這個環(huán)境上的性能測試主要是模擬生產(chǎn)環(huán)境規(guī)模的壓力,以保證系統(tǒng)上線后能夠滿足真實業(yè)務的需求。

當我們能夠自動的部署上述環(huán)境,或者其中某幾個環(huán)境的時候,我們就有了進行性能測試的基礎。

? ? 自動部署的意義不光是自動的準備被測環(huán)境,更重要的是能夠準備標準化的被測環(huán)境。對于性能測試來講,標準化的環(huán)境意義非常大,不管是被測系統(tǒng)硬件配置(操作系統(tǒng),cpu,內(nèi)存),被測軟件的配置,網(wǎng)絡配置還是系統(tǒng)拓撲結構,這些在每一次測試的時候都需要保持統(tǒng)一,或者變更可追蹤。否則,作為性能測試來講,每次環(huán)境都不一樣,壓力測試也就沒有標準可言。

? ? 性能測試持續(xù)集成的目標與原則:在持續(xù)集成和的自動化測試中我們需要明確幾個原則:第一,自動化測試的目的更多的是為了回歸測試。也就是要保證系統(tǒng)在更新過程中無論是功能還是性能沒有回退。第二,測試結果要盡量保證準確易讀。如果自動化測試用例積累的越累越多,測試頻率越來越快之后,往往一次測試會生成大量的測試結果。如果測試結果不準確或者不易解讀,會造成測試后需要花費大量時間去分析,團隊效率會大打折扣。

? ? 基于以上原則,對于性能測試來講,我們就需要在測試前對每一個測試用例設定好性能基線。性能基線可以通過前期的手動性能測試探索得出。無論是單一的接口壓測還是復雜的組合壓測,流程壓測,我們都可以通過測試在標準的環(huán)境上找到一個合理的基線。性能基線可以包含一下指標:測試并發(fā)數(shù),平均響應時間,最大響應時間,平均吞吐量,被測系統(tǒng)CPU使用率,CPU load,內(nèi)存使用量等。當我們有了對被測系統(tǒng)有了這些基線后,我們就可以將測試腳本放入自動化的流程中。在每一次的測試完成后,我們只需要對比本次的測試結果和性能基線就能清晰明確的知道系統(tǒng)有沒有性能上的回退。每次測試結束后我們的關注點可以聚焦到那些沒有達到性能基線的測試用例中,定位到相關的代碼或者系統(tǒng)配置變更,找到問題。

? ? 我們需要依照以下流程將測試用例與基線放入自動化流程中:1.編寫性能測試腳本 2.對標準系統(tǒng)進行壓測一方面調試腳本,一方面建立新用例的性能基線。不同階段的測試環(huán)境基線是不同的。3.定義測試套件,將測試腳本組合成不同的測試套件,便于在不同環(huán)境中調用不同的套件進行測試。對于不同測試套件的理解,我們可以舉個例子:比如在模塊測試環(huán)境,我們會定義和模塊接口相關的性能測試用例組合成套件執(zhí)行。由于模塊更新快,測試頻率也會相對比較高,所以不宜將全部性能測試腳本都跑一遍。而在集成環(huán)境和準生產(chǎn)環(huán)境,我們可以定義測試用例更全面的測試套件以保證測試覆蓋率。4.將性能測試腳本,套件和相應環(huán)境的基線可以放到測試平臺和版本控制系統(tǒng)(如git,svn等)中以便在后面的自動化測試過程中自動化的調用。

? ? 工具平臺支撐:對于性能測試的持續(xù)集成,我們需要有以下能力的工具和平臺的支撐才能夠完成。

1.測試環(huán)境能夠自動生成。測試過程中不同的測試用例對并發(fā)數(shù)的要求是不同的,我們需要有一個可伸縮的測試工具來滿足不同測試用例的并發(fā)需求。對于大并發(fā)量測試的系統(tǒng),往往我們需要使用多臺壓力機同時提供壓力,搭建測試集群不可避免。XMeter作為性能測試平臺,無論是公有云服務還是企業(yè)私有部署版,都能夠自動為不同的測試壓力自動創(chuàng)建壓力機集群,分配測試腳本執(zhí)行測試,并能夠實時的收集測試數(shù)據(jù)生成測試報告。而且XMeter為每臺壓力機都配備了性能監(jiān)控,也就是說我們在測試過程中可以同時監(jiān)控我們的壓力機是否處于正常狀態(tài),以及時發(fā)現(xiàn)由于壓力機本身的性能問題造成測試數(shù)據(jù)的偏差。

2.測試環(huán)境易于維護。對于一個需要長期運行的持續(xù)集成環(huán)境,測試環(huán)境也是需要長期運行和維護的,如果此環(huán)境需要大量人力去維護對生產(chǎn)效率提升也是重大的阻礙。XMeter作為一個成熟的性能測試平臺可以很好的滿足此需求。對于使用公有云線上服務的客戶,用戶本身完全不需要去關心平臺的維護,只需要在需要測試的時候調用服務,就像使用自來水一樣隨用隨取,簡單方便。對于不能夠使用公用云服務進行內(nèi)網(wǎng)壓測的客戶,也可以使用企業(yè)私有部署版本,在自己的環(huán)境中搭建XMeter平臺。XMeter提供了簡單方便的管理員界面,可以輕松的將壓力機注冊到平臺中。在測試過程中測試服務會自動尋找可用的壓力機進行測試,測試完成后資源自動回收,實現(xiàn)了最大限度的資源利用率。

3.測試工具與持續(xù)集成,持續(xù)部署平臺的對接。在持續(xù)集成,持續(xù)部署環(huán)境下,性能測試的觸發(fā)和結果的收集應該是可以自動化的。自動化測試的觸發(fā)可以為手動觸發(fā),或者是自動化環(huán)境部署完成后自動觸發(fā)。這樣我們就需要測試工具平臺提供可自動調用的接口來滿足這一需要。XMeter提供了豐富的RestfulAPI和命令行工具,可以輕松的和不同持續(xù)部署,持續(xù)集成系統(tǒng)對接。通過自動化的接口調用來上傳腳本,啟動測試和收集結果。

? ? 下面是一個以Jenkins為持續(xù)集成流水線引擎,SVN為版本控制系統(tǒng),XMeter為性能測試平臺的自動化測試框架圖:


當然,我們也有其他的替代方案,這里只是舉一個例子給大家作為參考。

? ? 到此我們簡單介紹了一下如何在項目中規(guī)劃和實施性能測試的持續(xù)集成。當然在實際過程中,我們還有很多細節(jié)問題需要解決。俗話說方法總是比困難多,當我們有了足夠的驅動力,相對成熟的持續(xù)部署環(huán)境,明確的目標和工具支持,這些問題都可以迎刃而解。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 轉載本文需注明出處:微信公眾號EAWorld,違者必究。 本文目錄: 一、為什么要做移動應用的持續(xù)集成與自動化測試...
    72a1f772fe47閱讀 1,176評論 0 11
  • 文章來自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鵬閱讀 9,345評論 2 126
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程、活動和任務的結構性框架。軟件項目的開發(fā)包括:需求、設...
    宇文臭臭閱讀 6,852評論 5 101
  • 宗喀巴大師,法名羅桑扎巴,意為善慧,元順帝至正十七年1357年10月25日誕生于青海湟中名為宗喀的地方(今...
    WUZHA閱讀 562評論 0 0
  • 簡介 有時候會存在特殊需求:當前的app不同的界面都需要設置為入口進行展示。但是Android系統(tǒng)默認只運行一個a...
    Goorwl閱讀 4,079評論 0 4

友情鏈接更多精彩內(nèi)容