簡介
Apache JMeter是100%純java桌面應用程序,被設計用來測試C/S結構的軟件(例如web應用程序)。它可以被用來測試包括基於靜態和動態資源程序的性能,例如靜態文件,Java Servlets,Java 對象,數據庫,FTP 服務器等等。JMeter可以用來模擬一個在服務器、網絡或者對象上大的負載來測試或者分析在不同的負載類型下的全面性能。
另外,JMeter能夠用斷言創造測試腳本來驗證應用程序是否返回了我們期望的結果,從而幫助我們進行回歸測試。為了得到最大的靈活性,JMeter允許我們使用正則表達式創建斷言。
安裝
windows版本
下載最新版本
http://jmeter.apache.org/download_jmeter.cgi
編寫本文時最新版本 2.12 (要求 Java 6 或更高)
解壓zip/tar文件到任意目錄。
確保正確安裝JRE/JDK並且設置環境變量JAVA_HOME。
避免在一個有空格的路徑安裝 Jmeter,這將導致分布式測試出現問題。
運行
用戶界面模式
運行 bin 目錄中的 JMeter (for Unix) 或者 JMeter.bat (for Windows) 文件。
服務器模式
為了分布測試 ,可以使用服務器模式運行JMeter,然后通過用戶界面/或命令行控制每一台服務器。
運行 bin 目錄中的 jmeter-server (for Unix) 或者 jmeter-server.bat (for Windows) 文件。
命令行
使用命令行運行:jmeter -n -t filename.jmx
-n 這是指定JMeter在非用戶界面模式運行
-t [包含測試計划的JMX文件的名字]
作為分布式的其中一台主機:jmeter-server -H my.proxy.server -P 8000
-H [代理服務器主機名或者ip地址]
-P [代理服務器端口,默認1099]
控制分布式主機執行腳本:jmeter -n -t filename.jmx -R 192.168.101.116:1099,192.168.101.113:1099
通過代理服務器連接網絡:jmeter -H my.proxy.server -P 8000
-H [代理服務器主機名或者ip地址]
-P [代理服務器端口]
測試計划
一個測試計划描述了一系列JMeter運行時要執行的步驟。一個完整的測試計划包含一個或者多個線程組(thread groups),邏輯控制(logic controllers),取樣發生控制(sample generating controllers),監聽器(listeners)定時器(timers),斷言(assertions)和配置元件(configuration elements)。
添加和刪除元件 ( Elements )
在一個樹上通過右擊可以添加元件到一個測試計划 ,從“add”列表中選擇一個新元件。或者通過選擇“open”選項從文件加載。
刪除元件,確保元件被選中,在元件上右擊,然后選擇"remove"選項。
加載和保存元件
從文件加載元件,右擊目標元件,選擇“open”選項,然后選擇你的元件保存文件。JMeter將載入文件中的所有元件。
保存樹元件,在一個元件上右擊,選擇“save”選項。JMeter會保存已選的元件,加上所有下面的子元件。用這種方法,你能夠保存測試樹的一段、單獨元件、或者整個測試計划。
運行一個測試計划
運行一個測試計划,從“run”菜單項選擇“start”。停止你的測試計划,從同樣的菜單選擇“stop”。
線程組
線程組是任何一個測試計划的開始點. 所有的測試計划中的元件都要在一個線程組中。
如名字顯示那樣,線程組控制了一組線程, JMeter使用這些線程來執行你的測試,你可以做如下操作:
- 控制thread group
- 設置線程的數量
- 設置ramp-up周期
- 設置測試執行的循環次數
每一個線程都會完全和獨立的執行測試計划而不影響其他線程。多線程可以用於模擬到你的服務器程序的並發連接。
Ramp-up period 告訴JMeter需要多長時間來“ramp-up”去裝載全部的線程,如果30個線程被使用,而ramp-up period為120秒,那么JMeter會花120秒來使得所有的30個線程運行,每個線程將在上個線程開始后4秒開始。延遲時間=ramp-up period時間數/線程數
默認的,一個thread group被設置為不限定的循環。你可以設置thread group循環的次數,如果設置為一次,那么JMeter將執行測試一次然后停止。
Controllers
JMeter有兩種controller:Samplers和Logical Controllers
Samplers告知JMeter發送請求到服務器。 例如,如果你想JMeter發送一個HTTP請求,就添加一個HTTP Request Sampler。當然你也可以定制一個請求,在Sampler中添加一個或多個Configuration Elements。
Logical Controllers使你可以定制JMeter發送請求的邏輯。例如,你可以添加一個Interleave Logic Controller來控制交替使用兩個HTTP Request Samplers。同樣,一個特定的Logic controller,作為Modification Manager,可以讓你修改請求的結果。
Samplers
Sampler 告知JMeter發送請求到server端。JMeter現在有如下的samplers:
- FTP Request
- HTTP Request
- JDBC Request
- Java Object Request
- LDAP Request
- SOAP/XML-RPC Request
- Web Service (SOAP) Request (Alpha Code)
每個sampler都有一些可以設置的properties。 你也可以在一個sampler中添加Configuration Elements來做更多的設置。當然, 值得注意的是JMeter按照request在tree中添加的次序來發送請求。
如果你想同時發送多個並發的同一種類的request,例如HTTP request,到同樣一台服務器。可以考慮使用一個Defaults Configuration Element。每個Controller擁有一個或多個默認元素。
Listeners提供了獲取在JMeter運行過程中搜集到的信息的訪問方式。最簡單的Listener,Graph Results Listener圖示出了響應時間。Listeners提供了一種圖型化的方式來查看JMeter運行過程中產生的數據。
另外, Listeners能夠直接將搜集的到數據存入到文件中以備后用。任何一個listener都擁有一個設置該文件存儲地址的域。
Listener能夠加到測試中的任何位置。他們將僅僅收集同級別和所有低級別的elements產生的數據。