性能測試工具Grinder
什么是Grinder?
Grinder是一個JavaTM負載測試框架,支持分布式測試,且是開源的。
官網及下載:SourceForge.net.
The Grinder processes
Grinder是一個將測試腳本運行在多個機器上的框架。Grinder框架由三個process(或program)組成: worker processes, agent processes, 和console. 每種process的職責如下:
Worker processes
解釋Jython測試腳本,并啟動worker線程進行測試
Agent processes
管理 worker processes
The console
協調其他的 processes
數據的收集,處理及顯示
測試腳本的編輯及分發
Grinder由Java編寫,其中每個processes都是一個java虛擬機(JVM)。
在進行負載測試時,應該在每個測試機上啟動一個代理線程。代理進程啟動的所有worker進程都可以由同一個控制臺進行控制和監視。在每個測試機上都啟動多個代理進程是非常沒有必要的,但是如果你愿意也可以這樣做。
Tests and test scripts 測試及測試腳本
在一個典型的測試場景中,測試腳本會被執行很多遍。每個工作進程都包含若干個工作線程,每個工作線程都會調用測試腳本若干次。測試腳本的一次單獨執行稱作一個run。
測試腳本的獲取有兩種方式:
1. 手工編寫grinder測試腳本。參考:Script Gallery。
2. TCP代理錄制測試腳本
啟動代理命令:net.grinder.TCPProxy –console –http > grinder.py
設置IE代理:
在IE中打開設置窗口:Tools -> Internet Options -> Connections ->Local Area Network Settings -> advanced... 按上面控制臺輸出的信息填入代理。
打開要測試的網站或工程,對網站或工程的操作會被自動記錄到當前目錄的grinder.py腳本中。
Network communication網絡通訊
每個worker process都會與console建立一個網絡連接來報告統計數據。
每個agent process都與console建立一個連接來接收命令,然后傳遞給它的worker process。
Console通過一個特殊的地址和端口來監聽這兩種連接。默認情況下,地址是運行console的機器的本地地址,端口是6372。
如果agent process連接console失敗,或者 grinder.useConsole屬性被設置為false,agent將不需要console的控制而獨立地運行,并自動啟動worker process開始測試。Worker process運行至完成都不再向console報告。如果你不想受console的干擾而快速的開始測試,上面的方式是非常有用的。
Note
更改console地址的方法:設置grinder.properties文件中的grinder.consoleHost和grinder.consolePort。
輸出
每個worker process都會寫日志信息到文件out-host-n.log中,其中host是主機名,n是worker process數量。
Error信息在文件error-host-n.log中。如果沒有error產生,將不會創建該文件。
測試結果在文件data-host-n.log中。該文件可以導入電子表格工具中,例如Microsoft ExcelTM,以便進一步的分析。
最后的統計匯總數據(out-*文件中)形式如下:
Final statistics for this process: Successful Errors Mean Test Test Time Standard Tests Time(ms) Deviation (ms) Test 0 25 0 255.52 22.52 Test 1 25 0 213.40 25.15 Test 2 25 0 156.80 20.81 "Image" Test 3 25 0 90.48 14.41 Test 4 25 0 228.68 23.97 "Login page" Test 5 25 0 86.12 12.53 "Security check" Test 6 25 0 216.20 8.89 Test 7 25 0 73.20 12.83 Test 8 25 0 141.92 18.36 Test 9 25 0 104.68 19.86 "Logout page" Totals 250 0 156.70 23.32 |
測試過程中,Console會動態顯示簡單的統計信息。另外,plug-in和高級測試腳本可以提供額外的數據統計,例如:HTTP plug-in 添加了對response消息體的內容長度統計。
每個測試有兩種可能結果:
Success.
Error.
其中Total, Mean, 以及 Standard Deviation 都是基于成功的測試進行計算的。
如何啟動 Grinder開始測試?
啟動Grinder進行測試包括以下步驟:
創建 grinder.properties 文件.
該文件指定一般的控制信息(例如:worker process如何與console通信,使用的worker process數等),以及要執行的Jython測試腳本。
設置系統環境變量: CLASSPATH 包含 grinder.jar 文件, 該文件應該在 lib 文件夾下。
在其中一個測試機上啟動 console :
java net.grinder.Console
對每一個測試機,執行步驟1和步驟2,然后啟動一個agent process:
java net.grinder.Grinder
agent將會在本地文件夾中尋找grinder.properties文件。
Jython腳本通常存放在properties文件同級目錄下。
另外,可以通過參數的方式明確指定properties文件,例如:
java net.grinder.Grinder myproperties
Note
如果對console比較熟悉,可以通過console來編輯以及分發properties文件和測試腳本,這樣就不必將他們分別拷貝到每個測試機上。
下面的一些腳本是在Unix/Linux 下,用來啟動grinder agents, console 和 錄制HTTP腳本的TCPProxy。
Windows setGrinderEnv.cmd: · set GRINDERPATH=(full path to grinder install directory) · set GRINDERPROPERTIES=(full path to grinder.properties)\grinder.properties · set CLASSPATH=%GRINDERPATH%\lib\grinder.jar;%CLASSPATH% · set JAVA_HOME=(full path to java install directory) · PATH=%JAVA_HOME%\bin;%PATH% startAgent.cmd: · call (path to setGrinderEnv.cmd)\setGrinderEnv.cmd · echo %CLASSPATH% · java -cp %CLASSPATH% net.grinder.Grinder %GRINDERPROPERTIES% startConsole.cmd: · call (path to setGrinderEnv.cmd)\setGrinderEnv.cmd · java -cp %CLASSPATH% net.grinder.Console startProxy.cmd: · call (path to setGrinderEnv.cmd)\setGrinderEnv.cmd · java -cp %CLASSPATH% net.grinder.TCPProxy -console -http > grinder.py Unix setGrinderEnv.sh: · #!/usr/bin/ksh · GRINDERPATH=(full path to grinder install directory) · GRINDERPROPERTIES=(full path to grinder.properties)/grinder.properties · CLASSPATH=$GRINDERPATH/lib/grinder.jar:$CLASSPATH · JAVA_HOME=(full path to java install directory) · PATH=$JAVA_HOME/bin:$PATH · export CLASSPATH PATH GRINDERPROPERTIES startAgent.sh: · #!/usr/bin/ksh · . (path to setGrinderEnv.sh)/setGrinderEnv.sh · java -cp $CLASSPATH net.grinder.Grinder $GRINDERPROPERTIES startConsole.sh: · #!/usr/bin/ksh · . (path to setGrinderEnv.sh)/setGrinderEnv.sh · java -cp $CLASSPATH net.grinder.Console startProxy.sh: · #!/usr/bin/ksh · . (path to setGrinderEnv.sh)/setGrinderEnv.sh · java -cp $CLASSPATH net.grinder.TCPProxy -console -http > grinder.py |
posted on 2014-06-30 18:21 順其自然EVO 閱讀(749) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄