JMeter測試WEB性能入門


一.JMeter介紹

1.Apache JMeter是什么

   Apache JMeter 是Apache組織的開放源代碼項目,是一個100%純Java桌面應用,用於壓力測試和性能測量。它最初被設計用於Web應用測試但后來擴展到其它測試領域。Apache JMeter可以用於對靜態的和動態的資源(文件,Servlet,Perl腳本,Java對象,數據庫和查詢,FTP服務器或是其它資源)的性能進行測試。JMeter可以用於在服務器,網絡或對象模擬繁重的負載來測試它們提供服務的受壓能力或者分析不同壓力條件下的總體性能情況。你可以使用JMeter提供的圖形化界面,分析性能指標或者在高負載情況下測試你的服務器/腳本/對象。

2.Apache JMeter能做什么

1.能夠對HTTP和FTP服務器進行壓力和性能測試,也可以對任何數據庫進行同樣的測試

2.完全的可移植性和100%純Java

3.完全Swing的輕量級組件支持

4.完全多線程框架允許通過多個線程並發取樣和通過單獨的線程組對不同的功能同時取樣

5.精心的GUI設計允許快速操作和更精確的計時

6.緩存和離線分析/回放測試結果

7.高可擴展性:

        可鏈接的取樣器允許無限制的測試能力

        各種負載統計表和可鏈接的計時器可供選擇

        數據分析和可視化插件提供了很好的可擴展性以及個性化

        具有提供動態輸入到測試的功能

        支持腳本變成的取樣器

二.JMeter安裝

1.安裝環境

1.操作系統:window  xp  7  8

2.安裝包准備:

最新的JMeter下載地址

http://apache.dataguru.cn//JMeter/binaries/apache-JMeter-2.13.tgz

Jdk根據不同的操作系統選擇jdk版本

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

2.安裝過程

1.安裝JDK ,如我安裝的地址為:C:\Program Files (x86)\Java\jdk1.8.0_45

2.設置環境變量:

     i 在用戶變量中,新建變量名“JAVA_HOME”,變量值為:安裝JDK的目錄,如我的為:“C:\Program Files (x86)\Java\jdk1.8.0_45;”

     ii 再新建變量名為“CLASSPATH”,變量值為:

       “.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;;”        

     iii 在系統變量的“Path”變量值后加上:“%JAVA_HOME%/bin;” 

3.安裝JMeter,解壓“jakarta-JMeter-2.13.zip”到E盤根目錄下:“E:/jakarta-JMeter-2.13”

4.在系統的CMD命令提示符下輸入"java",能看到相應幫助信息,說明jdk安裝成功

5.運行JMeter: 直接打開 E:/jakarta-JMeter-2.13/bin/JMeter.bat 即可

三.JMeter頁面和主要測試組件

測試計划(Test Plan ):

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

下面看一下一個計划下面都有哪些主要的功能模塊(右鍵單擊“測試計划”彈出菜單)。

線程 用戶(Threads Users)

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

1) setup thread group  

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

2) teardown thread group.  

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

  可能你還是不太理解他們與普通的線程組有什么不同。 如果您用過junit,想必你不會對setup ,teardown這2個字眼陌生。 即時沒用過,也沒關系。 熟悉loadrunner的應該知道,loadrunner的腳本除了action里是真正的腳本核心內容,還有初始化“環境”的初始化腳本和測試完畢后對應的清除信息的腳本塊。 那么這里 setup thread group 和 teardown thread group 就是分別指這兩部分。  其實從本質上來看,他們並沒有什么不同。

3) thread group(線程組).

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

測試片段(Test Fragment)

  測試片段是在2.5版本之后新加的一個選項。

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

取樣器(Sampler)

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

邏輯控制器(Logic Controller)

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

配置元件(Config Element)

  配置元件(config element)用於提供對靜態數據配置的支持。CSV Data Set config 可以將本地數據文件形成數據池(Data Pool),而對應於HTTP Request Sampler和 TCP Request Sampler等類型的配制無件則可以修改Sampler的默認數據。 

定時器(Timer)

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

前置處理器(Per Processors)

    用於在實際的請求發出之前對即將發出的請求進行特殊處理。例如,HTTP URL重寫修復符則可以實現URL重寫,當RUL中有sessionID 一類的session信息時,可以通過該處理器填充發出請求的實際的sessionID 。

后置處理器(Post Processors)

  用於對Sampler 發出請求后得到的服務器響應進行處理。一般用來提取響應中的特定數據(類似LoadRunner測試工具中的關聯概念)。例如,XPath  Extractor 則可以用於提取響應數據中通過給定XPath 值獲得的數據。

斷言(Assertions)

   斷言用於檢查測試中得到的相應數據等是否符合預期,斷言一般用來設置檢查點,用以保證性能測試過程中的數據交互是否與預期一致。

監聽器(Listener)

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

到此,我們已經簡單了解了JMeter的基本組成元件,后續我們通過設置參數和聚合報告來執行一個簡單的性能測試。

四.主要參數設置和聚合報告分析

1.創建一個簡單的測試內容

1.測試目標網站是www.baidu.com

2.測試目的是該網站在負載達到20 QPS時的響應時間

2.建立測試計划

1.啟動JMeter后,JMeter會自動生成一個空的測試計划,用戶可以基於該測試計划建立自己的測試計划。

2. 一個性能測試請求負載是基於一個線程組完成的。一個測試計划必須有一個線程組。測試計划添加線程組非常簡單。在測試計划右鍵彈出下拉菜單(添加-->Threads(Users)--->線程組)中選擇線程組即可。

   JMeter中 每個測試計划至少需要包含一個線程組,當然也可以在一個計划中創建多個,這些線程組是同時被初始化並同時執行線程組下的Sampler的。

3.設置基本參數

線程組主要包含三個參數:線程數、准備時長(Ramp-Up Period(in seconds))、循環次數。

1.線程數:虛擬用戶數。一個虛擬用戶占用一個進程或線程。設置多少虛擬用戶數在這里也就是設置多少個線程數

2.准備時長:設置的虛擬用戶數需要多長時間全部啟動。如果線程數為20 ,准備時長為10 ,那么需要10秒鍾啟動20個線程。也就是每秒鍾啟動2個線程

3.循環次數:每個線程發送請求的次數。如果線程數為20 ,循環次數為100 ,那么每個線程發送100次請求。總請求數為20*100=2000 。如果勾選了“永遠”,那么所有線程會一直發送請求,一到選擇停止運行腳本

這里我們根據20QPS的負載分別設置這三個參數為20、10、10

4.添加HTTP請求

添加完成線程組后,在線程組上右鍵菜單(添加--->Sampler--->HTTP請求)選擇HTTP請求。對於JMeter來說,取樣器(Sampler)是與服務器進行交互的單元

一個HTTP請求的配置參數主要包括:

1.名稱:本屬性用於標識一個取樣器,建議使用一個有意義的名稱

2.注釋:對於測試沒有任何作用,僅用戶記錄用戶可讀的注釋信息

3.服務器名稱或IP :HTTP請求發送的目標服務器名稱或IP地址

4.端口號:目標服務器的端口號,默認值為80

5.協議:向目標服務器發送HTTP請求時的協議,可以是http或者是https ,默認值為http

6.方法:發送HTTP請求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等

7.Content encoding :內容的編碼方式,默認值為iso8859

8.路徑:目標URL路徑(不包括服務器地址和端口)

9.自動重定向:如果選中該選項,當發送HTTP請求后得到的響應是302/301時,JMeter 自動重定向到新的頁面。

10.Use keep Alive :當該選項被選中時,JMeter 和目標服務器之間使用 Keep-Alive方式進行HTTP通信,默認選中

11.Use multipart/from-data for HTTP POST :當發送HTTP POST 請求時,使用Use multipart/from-data方法發送,默認不選中

12.同請求一起發送參數:在請求中發送URL參數,對於帶參數的URL ,JMeter提供了一個簡單的對參數化的方法

13.同請求一起發送文件:在請求中發送文件,默認不選中,如果用戶只希望獲取頁面中的特定資源,可以在下方的Embedded URLs must match 文本框中填入需要下載的特定資源表達式,這樣,只有能匹配指定正則表達式的URL指向資源會被下載。

14用作監視器:此取樣器被當成監視器,在Monitor Results Listener 中可以直接看到基於該取樣器的圖形化統計信息。默認不選中

 

這里我們添加一個百度的HTTPS請求

5.設置qps

(1)JMeter提供了一個非常有用的定時器,稱為Constant Throughput Timer (常數吞吐量定時器),該定時器可以方便地控制給定的取樣器發送請求的吞吐量。右鍵點擊fnng.cnblogs.com ,彈出菜單(添加--->定時器--->Constant Throughput Timer)選擇Constant Throughput Timer

(2)Constant Throughput Timer 的屬性包括:

Target throughput(in samples per minute):目標吞吐量。注意這里是每分鍾發送的請求數,因此,對應測試需求中所要求的20 QPS ,這里的值應該是1200

Calculate Throughput based on :有5個選項,分別是:

  This thread only :控制每個線程的吞吐量,選擇這種模式時,總的吞吐量為設置的 target Throughput 乘以線程的數量

  All active threads :設置的target Throughput 將分配在每個活躍線程上,每個活躍線程在上一次運行結束后等待合理的時間后再次運行。活躍線程指同一時刻同時運行的線程。

  All active threads in current thread group :設置的target Throughput將分配在當前線程組的每一個活躍線程上,當測試計划中只有一個線程組時,該選項和All active threads選項的效果完全相同。

  All active threads (shared ):與All active threads 的選項基本相同,唯一的區別是,每個活躍線程都會在所有活躍線程上一次運行結束后等待合理的時間后再次運行

  All cative threads in current thread group (shared ):與All active threads in current thread group 基本相同,唯一的區別是,每個活躍線程都會在所有活躍線程的上一次運行結束后等待合理的時間后再次運行

  這里為我們設置定時器的Target throughput為1200/分鍾(20 QPS),設置Calculate Throughput based on 的值為All active threads

6.添加聚合報告

   腳本的主要部分設置完成后,需要通過某種方式獲得性能測試中的測試結果,在本例中,我們關心的是請求的響應時間。JMeter 中我們可在添加聚合報告,更為直觀的查看測試結果。添加聚合報告,右鍵點擊線程組,在彈的菜單(添加--->監聽器--->聚合報告)中選擇聚合報告

7.執行腳本

  剛剛我們設置的參數如下

---------------------------------------------------------------------------------------------------------------------------

線程組:

線程數:20

准備時長:10

循環次數:10

--------------------------------------------------------------------------------------------------------------------------

HTTP請求:

名稱:baidutest

服務器名稱或IP :www.baidu.com

端口號:443

Implementation :java

協議:https

方法:GET

路徑:/

--------------------------------------------------------------------------------------------------------------------------

常數吞吐量定時器:

Target throughput(in samples per minute):1200.0

Calculate Throughput based on :All active threads

---------------------------------------------------------------------------------------------------------------------------

點擊工具欄上的運行按鈕,或者點擊菜單欄“ 運行--->啟動 ” 或者使用快捷鍵ctrl+r 來運行程序。

8.聚合報告

  執行后的聚合報告如下圖

  其中每列的意義為

label:每個JMeter的http request都有一個name屬性,這里就是name屬性的值

samples:表示這次測試中一共發出了多少個請求,例如這次我們模擬20個用戶,每個用戶迭代10次,那么這里顯示的是200

average:平均響應時間

median:50%用戶的響應時間

90%line:90%用戶的響應時間

min:最小響應時間

max:最大響應時間

error%:本次測試中出現錯誤的請求的數量/請求總數

throughput:吞吐量-每秒完成的請求數

KB/sec:每秒從服務器接收到的數據量

通過結果可知本次測試baidu網站在負載達到20 QPS時的200個請求平均響應時間為61sec,100%通過

接下來我們來看看如何根據我們的場景需要,進行腳本錄制和測試

五.使用badboy錄制腳本

1.badboy介紹

   Badboy是一款不錯的Web自動化測試工具,如果你將它用於非商業用途,或者用於商業用途安裝Badboy 的機器數量不超過5台,你是不需要為它支付任何費用的。Badboy提供了將Web測試腳本直接導出生成JMeter 腳本的功能,並且這個功能非常好用,下面我們來看如何使用badboy錄制一個JMeter腳本,並供JMeter使用

2.badboy安裝

1.通過Badboy的官方網站下載Badboy的最新版本http://www.badboy.com.au/

2.安裝Badboy。安裝過程同一般的Windows 應用程序沒有什么區別,安裝完成后你可以在桌面和Windows開始菜單中看到相應的快捷方式——如果找不到,可以找一下Badboy安裝目錄下的Badboy.exe 文件,直接雙擊啟動Badboy 

3.使用badboy錄制腳本

1.啟動Badboy,你可以看到下面的界面

在地址欄中輸入你需要錄制的Web應用的URL——http://www.baidu.com

2.點擊 開始錄制 按鈕(圖中藍色圓圈標注的部分)開始錄制
開始錄制后,你可以直接在Badboy內嵌的瀏覽器(主界面的右側)中對被測應用進行操作,所有的操作都會被記錄在主界面左側的編輯窗口中(圖中黃色方框標 注的部分)——在這個試驗中,我們在baidu的搜索引擎中輸入 JMeter 進行搜索。不過錄制下來的腳本並不是一行行的代碼,而是一個個Web對象——這有點像LoadRunner的VuGen中的Tree View視圖

3.錄制完成后,點擊工具欄中的“停止錄制”按鈕(圖中紫色方框標注的部分),完成腳本的錄制。選擇“File -> Export to JMeter”菜單,填寫文件名“baidu.jmx”,將錄制好腳本導出為JMeter腳本格式。

4.啟動JMeter並打開剛剛生成的測試腳本,就可以用JMeter進行測試了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM