書評:實戰Apache JMeter

strelz 7年前發布 | 13K 次閱讀 JMeter Apache JMeter

要點

  • JMeter是Apache的一款開源的負載測試工具
  • 通過實例學習JMeter的指南并不多
  • 可以從 Leanpub 下載這本書的電子版,也可以從Amazon購買 紙質版
  • InfoQ對這本書做了評價,并跟作者討論了關于書和JMeter的話題

JMeter是一個負載測試Java工具庫,它是Apache軍團成員里被埋沒的英雄之一。JMeter在Java 1.1時代發布,已經成為負載測試方面不可或缺的測試工具,它為那些包含Web前端、JVM服務器和一堆NoSQL或關系型數據庫的多層架構應用程序提供了很多功能。

《實戰Apache JMeter》是Sai Matam和Jagdeep Jain的一本新作,可以從 Leanpub 下載電子版,或者從Amazon購買 紙質版 。這本書填補了JMeter學習指南的空白,它通過平白清晰的筆調和大量截屏圖片來降低學習JMeter的難度。這本書適合各個級別的開發人員。

這本書的內容是這樣組織的:

它首先以一個自動化性能測試案例作為開場,這個案例主要測試應用程序匯率轉換功能的響應時間,并繪制出相關的性能曲線。緊接著JMeter作為行業中堅力量出場解決測試問題。

接下來介紹性能測試的相關理論,以及一些最佳實踐,然后提供了一個使用JMeter的測試樣例,讀者可以自己根據樣例動手體驗JMeter。

后面的幾章開始深入JMeter,分別介紹了如何創建和錄制JMeter測試計劃,如何為測試負載分配線程組(測試入口),如何為請求創建預處理器,如何為測試序列創建控制器,如何使用計時器模擬用戶的點擊動作,如何創建各種服務器負載樣本取樣器,如何創建響應斷言,如何創建響應監聽器,如何創建后置處理器以便從響應中抽取數據,以及如何為測試套件定義屬性和變量。

基于這幾章的內容,接下來介紹在GUI模式和非GUI模式下進行分布式測試,然后介紹測試最佳實踐、問題診斷、插件的使用以及其它一些經驗之談。

最后是一些綜合案例學習和一個性能儀表盤的教程。

整本書有400多頁,不過它包含了大量圖片,所以可以很快讀完這本書。

這本書的前言部分說明了性能負載測試的重要性:

很多公司總是在關鍵時刻才開始進入性能測試,然后工程團隊被要求在極短的時間內完成性能測試。

InfoQ針對該書內容與作者Sai Matam和Jagdeep Jain進行了交談。

InfoQ:這是一本很詳盡的指南,你們為什么會想到要寫這么一本書呢?

Matam & Jain:我們所在的性能工程團隊要求我們對一個SaaS Web應用程序進行調優,于是我們使用JMeter作為性能測試工具。我們在為一些測試用例編寫測試腳本時總是碰到困難,我們需要一些JMeter的指南來幫我們度過難關。有些現成的資源(書或網頁)會為我們提供了一些提示,不過它們并沒有提供太多的細節。在萬般無奈之下,我們想到了要寫這樣的一本書,把我們在編寫JMeter測試用例過程中遇到的問題和解決方案聚合起來,作為本書的內容。我們想要這本書盡可能地詳盡,里面的例子不會漏掉任何中間步驟。

InfoQ:在負載測試的計劃階段,JMeter會析出檢測器的開銷嗎?還是說這只是設計器的工作?

Matam & Jain:響應時間的計算是從請求離開JMeter之時到接收到服務器的響應為止。JMeter本身不會帶來多少的開銷,所以測試是非常準確的。在測試運行過程中,結果會被累計起來。為了不對測試結果產生影響,結果要到測試結束之后才開始被處理,包括圖表的繪制。類似的,當JMeter運行在分布式模式下時,普通節點的測試結果會被聚合到主節點上,在測試結束時才進行處理。用戶負載是通過線程來模擬的,而線程的可用數量會受到系統的限制。執行測試的工程師在運行JMeter時需要對CPU和內存進行監控。把負載控制在60%以下是比較理想的,這樣可以確保不會出現額外的開銷。

InfoQ:JMeter似乎無法跟持續集成環境一起使用,比如Jenkins或Bamboo。這里面有什么原因嗎?

Matam & Jain:我們在書里提到,把性能測試作為持續集成的一個環節是非常重要的,在案例學習部分也提到了這一點。我們認為可以把關于這個問題的討論也加入到書中。不過,我們現在把注意力放在了核心的內容上。

InfoQ:除了性能測試,JMeter也提供了一些重要的功能測試特性。你們為什么沒有介紹這方面的內容呢?

Matam & Jain:JMeter不是為功能測試而生的。它雖然也可以用來做功能測試,不過不是最理想的。功能測試包含了單元測試和端到端的集成測試,已經有很多現成的工具可以用來做功能測試,而JMeter僅局限于那些網絡相關的功能測試。而且,如果你要用JMeter作功能測試,那么就要重新組織測試腳本了,因為需要加入很多“斷言”來驗證響應消息。在這本書里,我們假設在進行性能測試之前,已經通過了功能測試。

InfoQ:你們為什么要開發那些應用程序樣例呢?只是為了這本書嗎?

Matam & Jain:有兩個原因:

1. 通常我們在學習JMeter時,測試樣例總是把地址指向一些公共網站(比如Yahoo或Google),這樣做是不對的。

2. 在學習JMeter時,我們可能需要一個可以重定向的URL或者一個可以接收JSON格式數據的SOAP端點或REST端點。應用程序樣例“dt”就可以滿足所有的需求。讀者可以使用書中提供的測試腳本,不需要做任何修改。

書中的Web應用程序樣例是一個虛擬的數碼配件網店。我們給它取名“Digital Toys”,簡稱“dt”。讀者可以從github上下載代碼。這個應用部署起來很簡單,只要把它解壓,并從命令行啟動。書中所有相關的例子都是基于這個應用開發的。

InfoQ:這本書的潛在讀者是誰?我們應該如何利用好這本書?

Matam & Jain:這本書適合那些對JMeter有一點使用經驗的初學者和有經驗的工程師。初學者可以先學習本書的前四章,學習怎么錄制、創建和運行測試用例。有經驗的工程師可以根據需要自行選擇特定的樣例進行學習。組件相關的章節介紹了JMeter的配置和使用,其中手冊部分演示了一些特定的用法。性能架構師可以閱讀“理論知識”部分和“案例學習”部分,這樣有助于他們為公司做好性能測試規劃。

InfoQ:有沒有哪些性能測試場景是JMeter不擅長的?

Matam & Jain:JMeter采用了插件機制,對新的測試協議提供了支持,所以你要自己花時間去開發插件。如果某個協議不被支持,也沒有可用的開源插件,那么就不要使用JMeter。

JMeter并不適合用來做底層的協議測試,這些底層測試要求吞吐量接近線纜的傳輸速度。例如,它就不適合用來做以太網測試,以及那些要求吞吐量達到100Mbps或1Gbps的底層協議測試。對于此類測試,有其它一些辦法。

InfoQ:JMeter的不足之處有哪些呢?

Matam & Jain:JMeter在3.0之前對報表的支持不是很好。不過在引入了儀表盤之后,這種情況有所緩解。另一方面是關于錯誤報告。隱蔽的錯誤消息或者說缺少錯誤消息給測試腳本的編寫帶來困難,而且在實際運行測試時也難以觀察到錯誤。不過,這些都是些小問題,JMeter團隊已經在著手解決這些問題。通過恰當地管理測試用例,合理地使用報表和儀表盤,公司可以從性能測試中獲得好處,避免把錢花在那些昂貴的工具上。

 

來自:http://www.infoq.com/cn/articles/jmeter-by-example-book-review

 

 本文由用戶 strelz 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!