標籤:amp 壓力測試 有一個 網路 shel perl live users 資料
一.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 文字框中填入需要下載的特定資源運算式,這樣,只有能匹配指定Regex的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進行測試了
JMeter測試WEB效能入門