linux與Windows中,jmeter版本都通用,不分linux版本還是windows版本
由於Jmeter是一個純JAVA的應用,用GUI模式運行壓力測試時,對客戶端的資源消耗是相當驚人的,所以在進行正式的壓測時一定要使用non-gui模式運行,
如果並發數很高或者客戶端的硬件資源比較一般的話,還可以以server模式用多個client進行分布式測試。
准備工作
- 配置JMETER_HOME,步驟:
- Linux & MacOS X
- vim ~/.profile
- 在文件末尾增加以下代碼:
export JMETER_HOME=/yourpath/apache-jmeter-x.y #yourpath是你的Jmeter解壓目錄 #x.y是Jmeter版本,當然你也可以重命名此目錄
- 運行以下命令使配置生效
source ~/.profile
- 在命令行輸入 jemeter -v,如果打印出Jmeter的版本信息,說明環境配置成功
- Windows
- 計算機-屬性-高級系統設置-環境變量
- 點擊新建,變量名輸入:JMETER_HOME,變量值輸入你的Jmeter解壓路徑
- 點擊確定,然后編輯path,在變量值末尾加上%JMETER_HOME%\bin
- 設置好之后,驗證一下配置是否成功,打開DOS窗口輸入 jemeter -v,如果打印出Jmeter的版本信息,說明環境配置成功
-
配置jmeter client & server
官方文檔
1. the firewalls on the systems are turned off. #1.關閉防火牆 2. all the clients are on the same subnet. #2.所有的客戶端都在同一個子網內 3. the server is in the same subnet, if 192.x.x.x or 10.x.x.x ip addresses are used. If the server doesn't use 192 or 10 ip address, there shouldn't be any problems. #3.server也必須在同一子網內如果使用192.x.x.x或者10.x.x.x這樣的IP地址,如果server沒有使用192或者10這樣的IP地址,(server同client不在同一子網內)將不會有任何問題 4. Make sure JMeter can access the server. #4.確保Jmeter可以訪問到server 5. Make sure you use the same version of JMeter on all the systems. Mixing versions may not work correctly. #5.確保各系統的Jmeter版本保持一致,不同版本的Jmeter將不能很好的工作
----------------------------------------------------------------------一些術語的解釋:
- master,以GUI模式運行,同時控制測試的運行,在這里就是client,啟動腳本所在的那台機器。
- slave,運行jmeter-server並從master接收指令、向目標服務器發送請求
設置jmeter-server:
用文本編輯器打開JMETER_HOME/bin目錄下的jmeter.properties文件,添加運行jmeter-server的主機IP到remote-hosts
remote_hosts=10.0.0.158, 10.0.0.140,localhost
- 將配置在remote_hosts中的機器上的jmeter-server啟動(windows以管理員身份運行JMETER_HOME/bin目錄下的jmeter-server.bat,linux&macos下運行JMETER_HOME/bin目錄下的jmeter-server)
- 在客戶端以gui模式啟動jmeter,然后打開或者創建一個測試腳本
- 從gui模式啟動所有的遠程server,方法:運行-遠程全部啟動,看下圖,也可以單獨啟動某一個jmeter-server
-
-
- 如果有jmeter-server沒有啟動或者配置有問題,那么這次測試不會運行,會報以下錯誤(我這里是沒有在140這台機器上啟動Jmeter-server):
- 啟動成功后,在運行jmeter-server上的機器上可以看到以下日志輸出
- 至此,腳本調試完成,關掉Jmeter GUI(先通過GUI停掉遠程已經開啟的jmeter-server)
-
既然是要通過non-gui模式運行,那么我們就不得不去了解下在non-gui模式下jmeter命令的參數,下面是Jmeter官方文檔中列出來的一些參數,中文注釋部分為我加入的解釋
-h, --help
print usage information and exit
#打印幫助信息
-v, --version
print the version information and exit
#打印版本信息
-p, --propfile {argument}
the jmeter property file to use
#運行時指定property文件,默認是使用JMETER_HOME/bin目錄下的jmeter.properties,如果用戶自定義有其它的配置,在這里加上
#用法如下: -p user.properties
-q, --addprop {argument}
additional property file(s)
#其它配置文件,如JVM參數等等
-t, --testfile {argument}
the jmeter test(.jmx) file to run
#要運行的jmeter腳本
-j, --jmeterlogfile {argument}
the jmeter log file
#指定記錄jmeter log的文件,默認為jmeter.log
-l, --logfile {argument}
the file to log samples to
#記錄采樣器Log的文件
-n, --nongui
run JMeter in nongui mode
#以nongui模式運行jmeter
-s, --server
run the JMeter server
#運行JMeter server
-H, --proxyHost {argument}
Set a proxy server for JMeter to use
#代理服務器地址
-P, --proxyPort {argument}
Set proxy server port for JMeter to use
#代理服務器端口
-u, --username {argument}
Set username for proxy server that JMeter is to use
#代理服務器的用戶名
-a, --password {argument}
Set password for proxy server that JMeter is to use
#代理服務器用戶名對應的密碼
-J, --jmeterproperty {argument}={value}
Define additional JMeter properties
#定義額外的Jmeter屬性
-G, --globalproperty (argument)[=(value)]
Define Global properties (sent to servers)
e.g. -Gport=123
or -Gglobal.properties
#定義發送給server的全局屬性
#如:-Gport=123 或者-Gglobal.properties(指定監聽server的端口)
-D, --systemproperty {argument}={value}
Define additional System properties
#定義系統屬性
-S, --systemPropertyFile {filename}
a property file to be added as System properties
#通過指定的property文件定義系統屬性
-L, --loglevel {argument}={value}
Define loglevel: [category=]level
e.g. jorphan=INFO or jmeter.util=DEBUG
#定義日志等級
-r, --runremote (non-GUI only)
Start remote servers (as defined by the jmeter property remote_hosts)
#啟動遠程server(在jmeter property中定義好的remote_hosts),公在non-gui模式下此參數才生效
-R, --remotestart server1,... (non-GUI only)
Start these remote servers (overrides remote_hosts)
#啟動遠程server(如果使用此參數,將會忽略jmeter property中定義的remote_hosts)
-d, --homedir {argument}
the jmeter home directory to use
#Jmeter運行的主目錄
-X, --remoteexit
Exit the remote servers at end of test (non-GUI)
#測試結束時,退出(在non-gui模式下) - 進入測試腳本所在的目錄,執行以下命令
-
jmeter -t "JMS Point-to-Point.jmx" -n -l testresult.csv -r
-
-
運行成功后,在客戶端機器上可以看到以下Log輸出:
-
至此,以經通過non-gui模式運行Jmeter分布式測試了
這里有一點小貼士:以分布式運行Jmeter,是在所有的server上運行同樣的測試腳本,也就是說,如果你打算1s起100個線程,如果你用5台機器進行分布式測試,那么將腳本調試至1s起20個線程,否則則是1s起了500個線程,這樣可能跟你的預期有所差別。
-
-
-