雲智慧壓測實戰分享之JMeter工具使用初探

工欲善其事必先利其器,要保證移動應用產品在上線以後能穩定運行於各類複雜環境,僅僅進行功能測試是遠遠不夠的,壓力測試愈來愈被應用開發商所重視。而壓力測試從傳統的內部壓力到基於雲計算的壓力測試,再到用戶視角的外部壓測,也在不斷髮展變化。JMeter做爲一款廣爲流傳的開源壓測產品,最初被設計用於Web應用測試,並不斷擴展到其餘測試領域。
現在,JMeter能夠用於測試靜態和動態資源,例如靜態文件、Java 小服務程序、CGI 腳本、Java 對象、數據庫、FTP 服務器等等,還能對服務器、網絡或對象模擬巨大的負載,經過不一樣壓力類別測試它們的強度和分析總體性能。另外,JMeter可以對應用程序作功能/迴歸測試,經過建立帶有斷言的腳原本驗證你的程序返回了你指望的結果。爲了最大限度的靈活性,JMeter容許使用正則表達式建立斷言。
JMeter的特色包括對HTTP、FTP服務器、數據庫進行壓力/性能測試;徹底的可移植性;徹底 Swing和輕量組件支持包;徹底多線程;緩存和離線分析/回放測試結果;可連接的取樣器;具備提供動態輸入到測試的功能;支持腳本編程的取樣器等。不只如此,在設計階段JMeter可以充當HTTP PROXY(代理)來記錄瀏覽器的HTTP請求,也能夠記錄Apache等WebServer的log文件來重現HTTP流量,並在測試運行時以此爲依據設置重複次數和併發度(線程數)來進行壓測。正則表達式

JMeter的壓力發生原理

JMeter能夠做爲Web服務器與瀏覽器之間的代理網關,捕獲瀏覽器請求和Web服務器響應,這樣就能快速生成性能測試腳本。有了測試腳本,JMeter經過線程組來模擬真實用戶對Web服務器的訪問壓力。
原理圖以下:數據庫

1
JMeter的結構以下圖所示,經過各類元件的組織配合,知足不一樣的測試須要:編程

2

JMeter的常見元件

一、Test Plan (測試計劃):用來描述一個性能測試,包含與本次性能測試全部相關的功能,也就說性能測試的全部內容都是於基於一個計劃的,右鍵單擊「測試計劃」彈出菜單:瀏覽器

3
注意:「函數測試模式」複選框若是被選擇,會記錄來自服務器返回的每一個取樣的數據,在測試監聽器中選擇一個文件,這些數據將被寫入文件。若是嘗試一個較小的測試來保證JMeter配置正確而且服務器正在返回指望的結果,這是頗有用的,但後果是這個文件會快速增大並對JMeter效率產生影響。緩存

二、Threads(Users)線程(用戶)服務器

4
1) setup thread group 
一種特殊類型的ThreadGroup的,可用於執行預測試操做。這些線程的行爲徹底像一個正常的線程組元件。不一樣的是這些類型的線程執行測試前進行按期線程組的執行。setUp Thread Group相似於lr的init.可用於執行預測試操做。
2) teardown thread group
一種特殊類型的ThreadGroup的,可用於執行測試後動做。這些線程的行爲徹底像一個正常的線程組元件。不一樣的是,這些類型的線程執行測試結束後執行按期的線程組。tearDown Thread Group相似於lr的end.可用於執行測試後動做。
3) thread group(線程組)
這個就是咱們一般添加運行的線程,能夠看作一個虛擬用戶組,線程組中的每一個線程均可以理解爲一個虛擬用戶。線程組中包含的線程數量在測試執行過程當中是不會發生改變的。cookie

5
在設置線程組參數的時候注意:
  Ramp-Up Period:指定了啓動全部線程所花費的時間,單位是秒,默認時間是1秒。好比,當前的設定表示「在5秒內啓動5個線程,每一個線程的間隔時間爲1秒」。若是須要JMeter當即啓動全部線程,將此設定爲0便可.
  循環次數:表示每一個線程執行多少次請求。網絡

三、測試片斷(Test Fragment)
測試片斷元素是控制器上的一個種特殊線程組,在測試樹上與線程組處於一個層級。它與線程組的差別在於,只有被一個模塊控制器或者是被控制器所引用時纔會執行。session

6

四、取樣器(Sampler)
取樣器(Sampler)是性能測試中向服務器發送請求,記錄響應信息和響應時間的最小單元,JMeter 原生支持多種不一樣的Sampler,如HTTP Request Sampler、FTP  Request Sampler、TCP Request Sampler、JDBC Request Sampler 等,每一種不一樣類型的Sampler能夠根據設置的參數向服務器發出不一樣類型的請求。在JMeter的全部Sampler中,Java Request Sampler與BeanShell Requst Sampler是兩種特殊的可定製的Sampler。多線程

7

五、邏輯控制器(Logic Controller)
邏輯控制器包括兩類元件,一類是用於控制test plan 中 Sampler節點發送請求的邏輯順序的控制器,經常使用的有 若是(If)控制器 、 switch Controller 、Runtime Controller、循環控制器等。另外一類是用來組織和控制 Sampler節點的,如事務控制器、吞吐量控制器。

8

六、配置元件(Config Element)
配置元件(config element)用於提供對靜態數據配置的支持。CSV Data Set config 能夠將本地數據文件造成數據池 (Data Pool),而對應於HTTP Request Sampler和 TCP Request Sampler等類型的配置元件則能夠修改 Sampler的默認數據。例如,HTTP Cookie Manager 能夠用於對 HTTP Request Sampler 的 cookie 進行管理。HTTP 請求默認值不會觸發JMeter發送http請求,而只是定義HTTP請求的默認屬性。

圖片描述

七、定時器(Timer)
定時器(Timer)用於操做之間等待時間的設置,等待時間是性能測試中經常使用的控制客戶端QPS的手段,相似於LoadRunner裏面的「思考時間」。JMeter 定義了Bean Shell Timer、Constant Throughput Timer、固定定時器等不一樣類型的Timer。

10

八、前置處理器(Per Processors)
前置處理器用於在實際的請求發出以前對即將發出的請求進行特殊處理。例如,HTTP URL重寫修復符則能夠實現URL重寫,當URL中有sessionID 一類的session信息時,能夠經過該處理器填充發出請求的實際的sessionID 。

圖片描述

九、後置處理器(Post Processors)
後置處理器是用於對Sampler 發出請求後獲得的服務器響應進行處理,通常用來提取響應中的特定數據(相似LoadRunner測試工具中的關聯概念)。例如,XPath  Extractor 能夠提取響應數據中經過給定XPath 值得到的數據,正則表達式提取器則能夠提取響應數據中經過正則表達式得到的數據。

12

 十、斷言(Assertions)
斷言用於檢查測試中獲得的相應數據等是否符合預期,斷言通常用來設置檢查點,用以保證性能測試過程當中的數據交互是否與預期一致。

13
 
十一、監聽器(Listener)
監聽器不是用來監聽系統資源的元件,而是對測試結果數據進行處理和可視化展現的一系列元件,包括圖形結果、查看結果樹、聚合報告、用表格察看結果都是咱們常常用到的元件。

圖片描述

十二、工做臺

15

在測試中咱們可能須要暫時更改一些組件,能夠把一些須要更改的組件保存在工做臺中,測試完成後再恢復。可是切記不能退出jmeter,一旦退出jmeter工做臺中的內容就會消失。

1三、Property Display
此元件至關因而jmeter.properties的GUI。

16

JMeter元件的做用域和執行順序

在JMeter中,元件的做用域是靠測試計劃的樹型結構中元件的父子關係來肯定的,做用域的原則是:
1.取樣器(sampler)元件不和其它元件相互做用,所以不存在做用域的問題。
2.邏輯控制器(Logic Controller)元件只對其子節點中的取樣器和邏輯控制器做用。
3.除取樣器和邏輯控制器元件外,其餘6類元件,若是是某個sampler的子節點,則該元件公對其父子節點起做用。
4.除取樣器和邏輯控制器元件外的其餘6類元件,若是其父節點不是sampler,則其做用域是該元件父節點下的其餘全部後代節點(包括子節點,子節點的子節點等)。
瞭解了元件有做用域以後,再來看看元件的執行順序規則,在同一做用域名範圍內,測試計劃中的元件按照以下順序執行:
1)配置元件(config elements )
2)前置處理程序(Per-processors)
3)定時器(timers )
4)取樣器(Sampler)
5)後置處理程序(Post-processors) (除非Sampler 獲得的返回結果爲空)。
6)斷言(Assertions)(除非Sampler 獲得的返回結果爲空)。
7)監聽器(Listeners)(除非Sampler 獲得的返回結果爲空)。
關於執行順序,有三點須要注意:

  • 前置處理器、後置處理器和斷言等元件只能對 取樣器做用,所以,若是在它們的做用域內沒有任何取樣器,則不會被執行。

  • 若是在同一做用域範圍內有多個同一類型的元件,則這些元件按照它們在測試計劃中的上下順序一次執行。

  • 一個斷言在測試樹中是分等級的。若是它的父元件是請求,它就被應用於那個請求。若是它的父元件是控制器,它就影響全部那個控制器下的全部請求。以上是JMeter使用以前必須瞭解的一些基本信息,接下來咱們將爲您帶來JMeter腳本錄製實例,敬請期待。

相關文章
相關標籤/搜索