1. 程式人生 > >apache jmeter壓力測試初體會-Mongodb Elasticsearch Test

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


前言

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

基礎瞭解

由於只是找本次測試需要用到的,所以不全面,需要了解全面的可瀏覽以下網站

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

http://www.cnblogs.com/yangxia-test/p/4023905.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,[email protected] - PerMon Metrics Collectord

注:[email protected] - 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

此時,我們點選新增監聽器,就可以看到出現了很多的[email protected]開頭的檔案。

第二步,這裡監控記憶體我們使用的是:[email protected] - PerfMon Metrics Collectot,在Windows環境下需要雙擊執行/serverAgent/startAgent.bat這個檔案,我們需要將serverAgent目錄及下面的檔案複製到我們測試的伺服器上,然後點選開啟(我這裡是本機,直接在本機上面開啟這個應用系統即可),它的預設埠為4444。

---jmeterplugins end---

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

測試結果的分析

一、Listener的使用

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

A.Aggregate Report 聚合報告




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

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

Average -- 平均響應時間

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

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

Min -- 最小響應時間

Max -- 最大響應時間

PS: 以上時間的單位均為ms

Error -- 出錯率

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

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


B.View Results Tree 以樹狀列表檢視結果




通過這個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數

[email protected] PerfMon Metrics Collector結果


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

Elasticsearch壓力測試

es的測試直接用現成的指令碼就可了,要說明的是這裡用到了使用者自定義變數和隨機變數

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

測試結果分析同上,略

本人也是第一次使用,還在學習中,本文有錯誤之處還望指正,有更好的方法也與大家分享

資源地址

http://download.csdn.NET/detail/huwei2003/8156405 (包含apache jmeter 2.10 程式包,解壓即可執行,template裡有mongodb,elasticsearch 的測試指令碼 jmx)