天天看點

apache jmeter壓力測試初體會-Mongodb Elasticsearch Test

前言

最近由于工作需要,要對mongodb,elasticsearch 進行測試,以便做優化調整,在搜尋對比了各個測試工具後決定選擇輕量級且免費的apache jmeter,最開始下了個2.12版本,發現沒有mongodb config element,後來換成2.10版

基礎了解

由于隻是找本次測試需要用到的,是以不全面,需要了解全面的可浏覽以下網站

​​http://jmeter.apache.org/usermanual/index.html  ​​

一. JMeter 介紹

     Apache JMeter是100%純JAVA桌面應用程式,被設計為用于測試用戶端/服務端結構的軟體(例如web應用程式)。它可以用來測試靜态和動态資源的性能,例如:靜态檔案,Java Servlet,CGI Scripts,Java Object,資料庫和FTP伺服器等等。JMeter可用于模拟大量負載來測試一台伺服器,網絡或者對象的健壯性或者分析不同負載下的整體性能。

     同時,JMeter可以幫助你對你的應用程式進行回歸測試。通過你建立的測試腳本和assertions來驗證你的程式傳回了所期待的值。為了更高的适應性,JMeter允許你使用正規表達式來建立這些assertions.

JMeter與LoadRunner比較

JMeter 是一款開源的測試工具,雖然與LoadRunner相比有很多不足,比如:它結果分析能力沒有LoadRunner詳細;很它的優點也有很多:

  開源,他是一款開源的免費軟體,使用它你不需要支付任何費用,

  小巧,相比LR的龐大(最新LR11将近4GB),它非常小巧,不需要安裝,但需要JDK環境,因為它是使用java開發的工具。

  功能強大,jmeter設計之初隻是一個簡單的web性能測試工具,但經過不段的更新擴充,現在可以完成資料庫、FTP、LDAP、WebService等方面的測試。因為它的開源性,當然你也可以根據自己的需求擴充它的功能。

二. JMeter 下載下傳安裝

1. http://jmeter.apache.org/下載下傳最新版本的JMeter,解壓檔案到任意目錄(本人用的是2.10版,在本文尾有下載下傳連結)

2. 安裝JDK,配置環境變量JAVA_HOME.

3. 系統要求:JMeter2.11 需要JDK1.6以上的版本支援運作

4. JMeter可以運作在如下作業系統上:Unix,Windows和Open VMS.

5. 避免在一個有空格的路徑安裝JMeter,這将導緻遠端測試出現問題。

三. JMeter 運作

1. 進入bin目錄運作jmeter.bat啟動jmeter linux 則用 sh jmeter 指令啟動

   注意:打開的時候會有兩個視窗,JMeter的指令視窗和JMeter的圖形操作界面,不可以關閉指令視窗。

2. JMeter的classpath:

   如果你想添加其他JAR檔案到JMeter的classpath中,你必須複制他們到lib目錄中;

   如果你開發了一個JMeter特定元件或有效的jar檔案,複制到lib目錄下的ext目錄中。

3. 打開之後顯示的是中文,如果你想使用其他語言,比如英文,那麼通過菜單選項->選擇語言->英文即可,當然轉為中文也是同樣操作。

四. JMeter 測試計劃元件 

打開Jmeter頁面:包括測試計劃+工作台。

1.Test Plan (測試計劃):

用來描述一個性能測試,包含與本次性能測試所有相關的功能。也就說本的性能測試的所有内容是于基于一個計劃的。

右鍵單擊“測試計劃”彈出菜單:

注意:

“函數測試模式”複選框,如果被選擇,它會使Jmeter記錄來自伺服器傳回的每個取樣的資料。如果你在測試監聽器中選擇一個檔案,這個資料将被寫入檔案。如果你嘗試一個較小的測試來保證Jmeter配置正确并且你的伺服器正在傳回期望的結果,這是很有用的。這樣做的後果就是這個檔案會快速的增大,并且Jmeter的效率會影響。

如果不記錄資料到檔案,這個選項就沒有不同了。

2.Threads (Users)線程 使用者

雖然有三個添加線程組的選項,名字不一樣, 建立之後,其界面是完全一樣的。之前的版本隻有一個線程組的名字。現在多一個setUp theread Group 與terDown Thread Group

1) setup thread group 

一種特殊類型的ThreadGroup的,可用于執行預測試操作。這些線程的行為完全像一個正常的線程組元件。不同的是,這些類型的線程執行測試前進行定期線程組的執行。

2) teardown thread group. 

一種特殊類型的ThreadGroup的,可用于執行測試後動作。這些線程的行為完全像一個正常的線程組元件。不同的是,這些類型的線程執行測試結束後執行定期的線程組。

3) thread group(線程組).

     這個就是我們通常添加運作的線程。通俗的講一個線程組,,可以看做一個虛拟使用者組,線程組中的每個線程都可以了解為一個虛拟使用者。線程組中包含的線程數量在測試執行過程中是不會發生改變的。

線程組:

  名稱:就如字面意思,起個有意義的名字就行

  注釋:

  線程數:這裡選擇5

  Ramp-Up Period:機關是秒,預設時間是1秒。它指定了啟動所有線程所花費的時間,比如,目前的設定表示“在5秒内啟動5個線程,每個線程的間隔時間為1秒”。如果你需要Jmeter立即啟動所有線程,将此設定為0即可

  循環次數:表示每個線程執行多少次請求。

3.測試片段(Test Fragment)

     測試片段元素是控制器上的一個種特殊的線程組,它在測試樹上與線程組處于一個層級。它與線程組有所不同,因為它不被執行,除非它是一個子產品控制器或者是被控制器所引用時才會被執行。

控制器

JMeter有兩種類型的控制器:取樣器(sample)和邏輯控制器(Logic Controller),用這些原件來驅動處理一個測試。

4.取樣器(Sampler)

    取樣器(Sample)是性能測試中向伺服器發送請求,記錄響應資訊,記錄響應時間的最小單元,JMeter 原生支援多種不同的sampler , 如 HTTP Request Sampler 、 FTP  Request Sample 、TCP  Request Sample 、 JDBC Request Sampler 等,每一種不同類型的 sampler 可以根據設定的參數向伺服器發出不同類型的請求。

5.邏輯控制器(Logic Controller)

    邏輯控制器,包括兩類無件,一類是用于控制test plan 中 sampler 節點發送請求的邏輯順序的控制器,常用的有 如果(If)控制器 、 switch Controller 、Runtime Controller、循環控制器等。另一類是用來組織可控制 sampler 來節點的, 如 事務控制器、吞吐量控制器。

6.配置元件(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請求的預設屬性。

7.定時器(Timer)

    定時器(Timer)用于操作之間設定等待時間,等待時間是性能測試中常用的控制用戶端QPS的手端。類似于LoadRunner裡面的“思考時間”。 JMeter 定義了Bean Shell Timer、Constant Throughput Timer、固定定時器等不同類型的Timer。

8.前置處理器(Per Processors)

    前置處理器用于在實際的請求發出之前對即将發出的請求進行特殊處理。例如,HTTP URL重寫修複符則可以實作URL重寫,當RUL中有sessionID 一類的session資訊時,可以通過該處理器填充送出請求的實際的sessionID 。

9.後置處理器(Post Processors)

    後置處理器是用于對Sampler 送出請求後得到的伺服器響應進行處理。一般用來提取響應中的特定資料(類似LoadRunner測試工具中的關聯概念)。例如,XPath  Extractor 則可以用于提取響應資料中通過給定XPath 值獲得的資料。

10.斷言(Assertions)

斷言用于檢查測試中得到的相應資料等是否符合預期,斷言一般用來設定檢查點,用以保證性能測試過程中的資料互動是否與預期一緻。

11.監聽器(Listener)

這個監聽器可不是用來監聽系統資源的元件。它是用來對測試結果資料進行處理和可視化展示的一系列元件。 圖形結果、檢視結果樹、聚合報告、用表格察看結果都是我們經常用到的元件。

五. 工作台

在測試中我們可能需要暫時更改一些元件,可以把一些需要更改的元件儲存在工作台中,測試完成後再恢複,但是切記:不能退出jmeter.一旦退出jmeter,工作台中的内容就會消失。

到此,我們已經簡單了解了jmeter的基本組成原件,我們後序的測試工作也就是使用這些元件來完成測試任務。

MongoDB壓力測試

啟動jmter,在open裡打開 mongodb.jmx

1 修改mongodb source config 主要修改 MongoDB Connection裡的 Server Address List:  192.168.1.15:37017 (伺服器位址)MongoDB Source:testmongodb(自定義的名字,後面的測試腳本中要用到這個name)

2 Thread Group 修改 Number of Threads(Users) 數量,Loop Count:(循環次數)

3 點選Thread Group 展開,修改測試腳本,MongoDB Source 填寫剛定義的名字 testmongodb, Database Name: process(測試用到的資料庫)

可以在這裡添加多個腳本,在腳本上右鍵 可以啟用,禁用它 

4 點選展開腳本(或在腳本上右鍵,添加 listener  view Result Tree,Graph Results,jp@gc - PerMon Metrics Collectord

注:jp@gc - PerMon Metrics Collectord 這個listener   在2.10版本裡并沒有,要添加插件。介紹如下

一.JMeterPlugins插件

很多時候,我們測試性能都需要檢視記憶體和CPU等資訊來判斷系統瓶頸,關于CPU和記憶體的監控,Jmeter并沒有很好的支援,很多時候,我們都隻能通過系統的資源監控器來觀察,一閃而過不會記錄下來,很不友善。幸好google開發了一款專門監控的Jmeter插件JMeterPlugins,彌補了Jmeter這方面的不足,下面就來介紹一下這款插件——JMeterPlugins.

目前我用的是JMeterPlugins-Standard-1.2.0與ServerAgent-2.2.1版本。

1.JMeterPlugins下載下傳位址

http://jmeter-plugins.org/downloads/all/  選擇需要的版本,下載下傳即可

2.JMeterPlugins配置使用

首先将下載下傳的檔案進行解壓,得到JMeterPlugins-Standard-1.2.0與ServerAgent-2.2.1.

第一步,将JMeterPlugins-Standard-1.2.0\lib\ext\JMeterPlugins-Standard.jar包複制到JMeter的lib目錄下面的ext目錄下面,重新啟動Jmeter

此時,我們點選添加監聽器,就可以看到出現了很多的jp@gc-開頭的檔案。

第二步,這裡監控記憶體我們使用的是:jp@gc - PerfMon Metrics Collectot,在Windows環境下需要輕按兩下運作/serverAgent/startAgent.bat這個檔案,我們需要将serverAgent目錄及下面的檔案複制到我們測試的伺服器上,然後點選打開(我這裡是本機,直接在本機上面打開這個應用系統即可),它的預設端口為4444。

---jmeterplugins end---

至此 測試計劃就完成了,每次測試可以選擇要測試的腳本(同時禁用本次不測試的腳本)就可以啟動測試了,關于測試結果的分析如下:

測試結果的分析

一、Listener的使用

用過LoadRunner的人應該都知道,LoadRunner會為我們提供一大堆圖示和曲線。但是在Jmeter裡,我們隻能找到幾個Listener來友善我們檢視測試結果。但是,對于初學者來說,一些簡單的結果分析工具可以使我們更容易了解性能測試結果的分析原理。是以,千萬别小看這幾個簡單的Listener啊。

A.Aggregate Report 聚合報告

apache jmeter壓力測試初體會-Mongodb Elasticsearch Test

我們可以看到,通過這份報告我們就可以得到通常意義上性能測試所最關心的幾個結果了。

Samples -- 本次場景中一共完成了多少個Transaction

Average -- 平均響應時間

Median -- 統計意義上面的響應時間的中值

90% Line -- 所有transaction中90%的transaction的響應時間都小于xx

Min -- 最小響應時間

Max -- 最大響應時間

PS: 以上時間的機關均為ms

Error -- 出錯率

Troughput -- 吞吐量,機關:transaction/sec 每秒完成的請求數

KB/sec -- 以流量做衡量的吞吐量

B.View Results Tree 以樹狀清單檢視結果

apache jmeter壓力測試初體會-Mongodb Elasticsearch Test

通過這個Listener,我們可以看到很詳細的每個transaction它所傳回的結果,其中紅色是指出錯的transaction,綠色則為通過的。

如果你測試的場景會有很多的transaction完成,建議在這個Listener中僅記錄出錯的transaction就可以了。要做到這樣,你隻需要将Log/Display:中的Errors勾中就可以了。

二、.jtl檔案的分析

在性能測試過程中,我們往往需要将測試結果儲存在一個檔案當中,這樣既可以儲存測試結果,也可以為日後的性能測試報告提供更多的素材。

Jmeter中,結果都存放在.jtl檔案。這個.jtl檔案可以提供多種格式的編寫,而一般我們都是将其以csv檔案格式記錄,這樣做是因為csv檔案格式看起來比較友善,更重要的是這樣做可以為二次分析提供很多便利。

我這裡所說的二次分析是指除了使用Listener之外,我們還可以對.jtl檔案進行再次分析。

a.設定jtl檔案格式

我們從jmeter官方網站中下載下傳下來的Jmeter解壓後是可以直接使用的。但是,使用預設配置生成的jtl檔案内容并不能滿足我們的需要。于是我們必須進行必要的設定。在2.2版本中,如果要修改jtl設定必須要到jmeter.properties檔案中設定;但是在2.3版本中,我們隻需要在界面上設定就可以了。你隻需要選擇某個Listener,點選頁面中的configure按鈕。此時,一個設定界面就會彈出來,建議多勾選如下項:Save Field Name,Save Assertion Failure Message。

b.jtl檔案中的各項

經過了以上設定,此時儲存下來的jtl檔案會有如下項:

timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,Latency

請求發出的絕對時間,響應時間,請求的标簽,傳回碼,傳回消息,請求所屬的線程,資料類型,是否成功,失敗資訊,位元組,響應時間

其中聚合報告中的,吞吐量=完成的transaction數/完成這些transaction數所需要的時間;平均響應時間=所有響應時間的總和/完成的transaction數;失敗率=失敗的個數/transaction數

jp@gc PerfMon Metrics Collector結果

apache jmeter壓力測試初體會-Mongodb Elasticsearch Test

MongoDB的測試大緻就是這樣了,比較粗略,有空再整理下

Elasticsearch壓力測試

es的測試直接用現成的腳本就可了,要說明的是這裡用到了使用者自定義變量和随機變量

在要添加變量的節點上右鍵添加 config element ->選擇要的變量類型 設定名稱和值,在要用變量的地方 ${變量名}即可 如 ${numberOfThreads}

測試結果分析同上,略

繼續閱讀