後端性能測試工具原理與行業常用工具簡介

後端性能測試和後端性能測試工具之間的關係是什麼?

後端性能測試工具是實現後端性能測試的技術手段,但是千萬不要簡單地把使用後端性能測試工具等同於後端性能測試,它只是後端性能測試中的一個必要步驟而已。

完整的後端性能測試應該包括性能需求獲取、性能場景設計、性能測試腳本開發、性能場景實現、性能測試執行、性能結果報告分析、性能優化和再驗證。

在這其中,後端性能測試工具主要在性能測試腳本開發、性能場景實現、性能測試執行這三個步驟中發揮作用,而其他環節都要依靠性能測試工程師的專業知識完成。

是不是感覺有點抽象,難以理解呢?我來做個類比吧。

假如你現在要去醫院看病,醫生會根據你對身體不適的描述,要求你先去驗血,並確定需要檢查的血液指標。驗血是通過專業的醫療儀器分析你的血樣,並得到驗血報告。

醫生拿到驗血報告後,根據常年積累的專業知識,然後結合驗血報告的各項指標以及指標之間的相互關係判斷你的病情,並給出診斷結果以及相應的治療措施。

同樣的驗血報告,如果給不懂醫術的人看,就是一堆沒有意義的數據;如果給一個初級醫生看,他可能只能基於單個指標的高低給出可能的推測;但是,如果是給一個具有豐富臨牀經驗的醫生看,他往往可以根據這些指標以及它們之間的相互關係給出很明確的診斷結果。

現在,我把這個過程和性能測試做個類比,把性能測試對應到整個看病的過程:

  • 需求獲取對應的是你向醫生描述身體不適細節的過程,醫生需要知道要幫你解決什麼問題;
  • 設計性能場景對應的是醫生決定需要檢查哪些血液指標的過程;
  • 使用性能測試工具對應的是使用醫療儀器分析血樣的過程;
  • 性能測試報告對應的就是驗血報告;
  • 性能測試人員分析性能結果報告的過程,對應的是醫生解讀驗血報告的過程;
  • 性能測試人員根據性能報告進行性能優化的過程,對應的是醫生根據驗血報告判斷你的病情,並給出相應治療措施的過程。

所以,在我看來使用性能測試工具獲得性能測試報告只是性能測試過程中的一個必要步驟而已,而得出報告的目的是讓性能測試工程師去做進一步的分析,以得出最終結論,並給出性能優化的措施。

後端性能測試工具和GUI自動化測試工具最大的區別是什麼?

雖然後端性能測試工具和GUI自動化測試工具都是通過自動化的手段模擬終端用戶使用系統的行爲,但是兩者實現的原理截然不同。

第一個顯著區別是,模擬用戶行爲的方式。

GUI自動化測試工具模擬的是用戶的界面操作,因此測試腳本記錄的是用戶在界面上對控件的操作;而性能測試工具模擬的是用戶的客戶端與服務器之間的通信協議和數據,這些通信協議和數據往往是用戶在界面上執行GUI操作時產生的。

明白了這一點,你自然就能明白爲什麼錄製虛擬用戶性能測試腳本時,我們需要先選定錄製協議了。

另外,正是由於腳本的模擬是基於協議的,所以我們才能比較方便地模擬成千上萬併發用戶同時使用系統的場景;否則,如果性能測試基於GUI發起,那我們就需要成千上萬的瀏覽器同時執行用例,而這顯然是不可能的。

第二個顯著的區別是,測試的執行方式。

GUI自動化測試的執行,一般是單用戶執行並驗證功能結果;而性能測試的執行,往往需要同時模擬大量的併發用戶,不僅需要驗證業務功能是否成功完成,還要收集各種性能監控指標,會涉及到壓力產生器、併發用戶調度控制、實時監控收集等內容,所以性能測試的執行控制要比GUI自動化測試複雜得多。

這部分內容,我稍後在第32和33這兩篇文章中詳細展開。

後端性能測試工具的原理是什麼?

雖然後端性能測試工具種類很多,但是由於都不能通過GUI的方式來模擬併發,所以其基本原理和主要概念基本一致。

首先,後端性能測試工具會基於客戶端與服務器端的通信協議,構建模擬業務操作的虛擬用戶腳本。對於目前主流的Web應用,通常是基於HTTP/HTTPS協議;對於Web Service應用,是基於Web Service協議;至於具體基於哪種協議,你需要和開發人員或者架構師確認,當然現在有些後端性能測試工具也可以直接幫你檢測協議的種類。

我們把這些基於協議模擬用戶行爲的腳本稱爲虛擬用戶腳本,而把開發和產生這些腳本的工具稱爲虛擬用戶腳本生成器

不同後端性能測試工具的虛擬用戶腳本生成器,在使用上的區別比較大:比如,LoadRunner是通過錄制後再修改的方式生成虛擬用戶腳本;而JMeter主要是通過添加各種組件,然後對組件進行配置的方式生成虛擬用戶腳本。

雖然LoadRunner也支持採用直接開發的方式產生虛擬用戶腳本,但是因爲開發難度太大,所以基本上都是採用先錄製再開發的方式,不會直接去開發。另外,雖然JMeter也支持錄製,但是JMeter的錄製功能是通過設置代理完成的,而且錄製出來的腳本都是原始的http請求,並沒有經過適當的封裝,所以錄製功能比較弱。

雖然不同工具的使用方式各有特色,但其本質上都是通過協議模擬用戶的行爲。

然後,開發完成了虛擬用戶腳本之後,後端性能測試工具會以多線程或多進程的方式併發執行虛擬用戶腳本,來模擬大量併發用戶的同時訪問,從而對服務器施加測試負載。

其中,我們把實際發起測試負載的機器稱爲壓力產生器。受限於CPU、內存,以及網絡帶寬等硬件資源,一臺壓力產生器能夠承載的虛擬用戶數量是有限的,當需要發起的併發用戶數量超過了單臺壓力產生器能夠提供的極限時,就需要引入多臺壓力產生器合作發起需要的測試負載。

一旦有了多臺壓力產生器,那就需要一個專門的控制器來統一管理與協調這些壓力產生器,我們把這個專門的控制器稱爲壓力控制器。壓力控制器會根據性能測試場景的設計,來控制和協調多臺壓力產生器上的多線程或多進程執行的虛擬用戶腳本,最終模擬出性能測試場景中的測試負載。

接着,在施加測試負載的整個過程中,後端性能測試工具除了需要監控和收集被測系統的各種性能數據以外,還需要監控被測系統各個服務器的各種軟硬件資源。比如,後端性能測試工具需要監控應用服務器、數據庫服務器、消息隊列服務器、緩存服務器等各種資源的佔用率。我們通常把完成監控和數據收集的模塊稱爲系統監控器

在性能測試執行過程中,系統監控器的數據顯示界面是性能測試工程師最密切關注的部分,性能測試工程師會根據實時的數據顯示來判斷測試負載情況下的系統健康狀況。

不同的後端測試工具中,系統監控器能力差別也比較大。比如,LoadRunner的系統監控器就很強大,支持收集各種操作系統的系統參數,還支持與SiteScope等第三方專業監控工具的無縫集成。

最後,測試執行完成後,後端性能測試工具會將系統監控器收集的所有信息彙總爲完整測試報告,後端性能測試工具通常能夠基於該報告生成各類指標的各種圖表,還能將多個指標關聯在一起進行綜合分析來找出各個指標之間的關聯性。我們把完成這部分工作的模塊稱爲測試結果分析器

需要強調的是,測試結果分析器只是按需提供多種不同維度和表現形式的數據展現工作,而對數據的分析工作,還是要依賴於具有豐富經驗的性能測試工程師。

後端性能測試場景設計是什麼意思,具體會涉及哪些內容?

性能測試場景設計,是後端性能測試中的重要概念,也是壓力控制器發起測試負載的依據。

性能測試場景設計,目的是要描述性能測試過程中所有與測試負載以及監控相關的內容。通常來講,性能測試場景設計主要會涉及以下部分:

  • 併發用戶數是多少?
  • 測試剛開始時,以什麼樣的速率來添加併發用戶?比如,每秒增加5個併發用戶。
  • 達到最大併發用戶數後持續多長時間?
  • 測試結束時,以什麼樣的速率來減少併發用戶?比如,每秒減少5個併發用戶。
  • 需要包含哪些業務操作,各個業務操作的佔比是多少?比如,10%的用戶在做登錄操作,70%的用戶在做查詢操作,其他20%的用戶在做訂單操作。
  • 一輪虛擬用戶腳本執行結束後,需要等待多長時間開始下一次執行?
  • 同一虛擬用戶腳本中,各個操作之間的等待時間是多少?
  • 需要監控哪些被測服務器的哪些指標?
  • 腳本出錯時的處理方式是什麼?比如,錯誤率達到10%時,自動停止該腳本。
  • 需要使用多少臺壓力產生器?

以上這些場景組合在一起,就構成了性能測試場景設計的主要內容。也就是說,性能測試場景會對測試負載組成、負載策略、資源監控範圍定義、終止方式,以及負載產生規劃作出定義,而其中的每一項還會包含更多的內容。具體請參見如圖1所示的思維導圖。

圖1 性能測試場景的設計

業內主流的後端性能測試工具有哪些?

目前,業內有很多成熟的後端性能測試工具,比如傳統的LoadRunner、JMeter、NeoLoad等。另外,現在還有很多雲端部署的後端性能測試工具或平臺,比如CloudTest、Loadstorm、阿里的PTS等。

其中,最爲常用的商業工具是HP軟件(現在已經被Micro Focus收購)的LoadRunner,由於其強大的功能和廣泛的協議支持,幾乎已經成了性能測試工具的代名詞。大量的傳統軟件企業,也基本都使用LoadRunner實施性能測試,所以我在後面分享企業級服務器端性能測試的實踐時,也是以LoadRunner爲基礎展開的。

另外,JMeter是目前開源領域最主流的性能測試工具。JMeter的功能非常靈活,能夠支持HTTP、FTP、數據庫的性能測試,也能夠充當HTTP代理來錄製瀏覽器的HTTP請求,還可以根據Apache等Web服務器的日誌文件回放HTTP流量,還可以通過擴展支持海量的併發。

然後,再加上JMeter開源免費的特點,已經被很多互聯網企業廣泛應用。比如,餓了麼就是使用JMeter來完成系統的全鏈路壓力測試。

其實,傳統軟件企業偏向於使用LoadRunner,而互聯網企業普遍採用JMeter,是有原因的。

LoadRunner License是按照併發用戶數收費的,併發用戶數越高收費也越貴,但是LoadRunner的腳本開發功能、執行控制、系統監控以及報告功能都非常強大,易學易用。

而傳統軟件企業,需要測試的併發用戶數並不會太高,通常是在幾百到十幾萬這個數量級,而且它們很在意軟件的易用性和官方支持能力,所以往往熱衷於直接選擇成熟的商業工具LoadRunner。

但是,互聯網企業的併發用戶請求數量很高,很多軟件都會達到百萬,甚至是千萬的級別。那麼,如果使用LoadRunner的話:

  1. 費用會高的離譜;

  2. LoadRunner對海量併發的測試支持並不太好;

  3. 很多互聯網企業還會有特定的工具需求,這些特定的需求很難在LoadRunner中實現,而在開源的JMeter中,用戶完全可以根據需求進行擴展。

所以互聯網企業往往選用JMeter方案,而且通常會自己維護擴展版本。

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