【轉】JMeter遠程測試


詳解JMeter遠程測試(1)
  如果運行JMeter客戶端的機器性能不能滿足測試需要,那么測試人員可以通過單個JMeter GUI客戶端來控制多個遠程JMeter服務器,以便對服務器進行壓力測試,模擬足夠多的並發用戶。通過遠程運行JMeter,測試人員可以跨越多台低端計算機復制測試,這樣就可以模擬一個比較大的服務器壓力。一個JMeter GUI客戶端實例,理論上可以控制任意多的遠程JMeter實例,並通過它們收集測試數據,如圖11-3所示。這樣一來,就有了如下特性:
  保存測試采樣數據到本地機器。
  通過單台機器管理多個JMeter執行引擎。
  沒有必要將測試計划復制到每一台機器,JMeter GUI客戶端會將它發往每一台JMeter服務器。
  每一台JMeter遠程服務器都執行相同的測試計划。JMeter不會在執行機間做負載均衡,每一台服務器都會完整地運行測試計划。
  在1.4GHz~3GHz的CPU、1GB內存的JMeter客戶端上,可以處理線程100~300。但是Web Service例外。XML處理是CPU運算密集的,會迅速消耗掉所有的CPU。一般來說,以XML技術為核心的應用系統,其性能將是普通Web應用的10%~25%。另外,如果所有負載由一台機器產生,網卡和交換機端口都可能產生瓶頸,所以一個JMeter客戶端線程數不應超過100。
  采用JMeter遠程模式並不會比獨立運行相同數目的非GUI測試更耗費資源。但是,如果使用大量的JMeter遠程服務器,可能會導致客戶端過載,或者網絡連接發生擁塞。
  請注意,假如測試人員將JMeter執行引擎安裝在應用服務器(測試目標)上,那么這顯然會加重應用服務器的負擔,測試結果也將變得不可信。作者推薦的方式是將JMeter遠程服務器放在應用服務器(測試目標)所在的同一個網段內。這樣做既可以減少JMeter收集測試結果對網絡產生的沖擊,又可以避免對應用服務器(測試目標)性能產生影響。
  
下面是啟動JMeter遠程測試的基本步驟:
   步驟1:配置節點
  確保所有節點(JMeter客戶端和JMeter遠程服務器)運行相同版本的JMeter。盡可能在所有操作系統上使用相同的Java版本。
  如果測試用到了外部數據文件,那么請注意這些文件不會被JMeter客戶端分發,因此測試人員需要確保每台執行機上都保存了這些數據文件(其所在目錄也必須正確)。如果有必要,用戶可以為每台執行機設置不同的屬性變量,即在JMeter遠程服務器上編輯user.properties或者system.properties文件。這些屬性將會在JMeter遠程服務器啟動時被識別,並有可能被應用到測試計划之中,從而影響測試執行(例如,與其他遠程服務器發生交互)。另外,不同的JMeter遠程服務器可能會使用不同內容的數據文件(例如,每台服務器必須使用不同的ID,就以此來划分數據文件)。
   步驟2:啟動遠程服務器
  要啟動JMeter遠程節點,請在執行機上運行JMETER_HOME/bin/jmeter-server (UNIX)或者JMETER_HOME/bin/jmeter-server.bat(Windows)腳本。
  請注意,每個遠程節點上只能運行一個JMeter遠程服務器腳本,除非采用不同的RMI端口。從JMeter 2.3.1開始,JMeter遠程服務器會自己啟動RMI注冊;用戶沒有必要單獨啟動RMI注冊。假設測試人員一定要單獨啟動RMI注冊,可以在遠程節點上定義JMeter屬性server.rmi.create=false。
  默認情況下,JMeter遠程服務器的RMI使用動態端口號。這樣就會為防火牆配置帶來麻煩,因此JMeter 2.3.2及其以后的版本,會檢查JMeter屬性server.rmi.localport。如果該值非零,JMeter遠程服務器就會用它來作為本地端口號。
   步驟3:將JMeter遠程服務器的IP地址添加到客戶端屬性文件中
  編輯JMeter控制機的屬性文件。在/bin/jmeter.properties文件中找到屬性"remote_hosts",使用JMeter遠程服務器的IP地址作為其屬性值。可以添加多個服務器的IP地址,以逗號作為分隔。
  請注意測試人員還可以使用-R命令行選項來指明將會使用的遠程服務器。這與使用-r 和-Jremote_hosts={服務器列表}的效果相同。例如jmeter -Rhost1,127.0.0.1,host2。
  如果測試人員定義JMeter屬性server.exitaftertest=true,那么遠程服務器在運行完單個測試后就會退出。-Z標志也有同樣的效果,參見后面的內容。
  步驟4(a):通過GUI客戶端啟動JMeter測試
  現在輪到啟動JMeter GUI客戶端了。在MS-Windows環境下運行"bin/jmeter.bat"腳本,在UNIX環境下運行"bin/jmeter"腳本。 測試人員會發現在運行(Run)菜單下,包含兩個子菜單"Remote Start"和"Remote Stop",如圖11-4所示。這兩個子菜單中包含測試人員在屬性文件中設置的JMeter遠程服務器IP地址。此刻,請使用遠程啟動和停止來代替普通的JMeter啟動和停止。
  圖11-4  運行菜單
  步驟4(b):通過非GUI客戶端啟動JMeter測試
  還有另外一種方法,測試人員可以通過非GUI客戶端來啟動遠程服務器。命令如下:
  jmeter -n -t script.jmx -r
  或者:
  jmeter -n -t script.jmx -R server1,server2...
  其他標志可能也有用。
  -Gproperty=value:在所有JMeter遠程服務器中定義一個屬性(可以多次出現)
  -Z:在測試結束后退出遠程服務器。
  第一個例子會啟動定義在JMeter屬性remote_hosts中的遠程服務器;而第二個例子會先定義遠程服務器列表,接着啟動它們。命令行客戶端會在所有服務器停止后退出。
   1.手動配置JMeter遠程測試
  在某些情況下,jmeter-server腳本不能正常 工作(如果測試人員使用的 操作系統不在JMeter開發者預期的范圍內)。下面介紹如何啟動JMeter遠程服務器(對應上面的步驟2),其中包含了更多人工操作。
   步驟2(a):啟動RMI注冊
  從JMeter 2.3.1開始,JMeter遠程服務器會自己啟動RMI注冊,因此這里的內容不適用於普通情況。如果要采用歷史版本的操作方法,首先在JMeter遠程服務器上定義JMeter屬性 server.rmi.create=false,並遵循如下指南。
  JMeter使用Remote Method Invocation(RMI)作為遠程通信機制。因此,測試人員需要用到JDK "bin"目錄中的RMI注冊程序(名為"rRmiregistry")。在運行Rmiregistry之前,請確保如下jar存在於測試人員的系統claspath中:
  JMETER_HOME/lib/ext/ApacheJMeter_core.jar。
  JMETER_HOME/lib/jorphan.jar。
  JMETER_HOME/lib/logkit-1.2.jar。
  注冊程序需要訪問特定JMeter類。運行Rmiregistry無須參數。默認情況下應用程序會監聽端口1099。
   步驟2(b):啟動JMeter遠程服務器
  一旦RMI注冊程序運行起來,就啟動JMeter遠程服務器。JMeter啟動腳本需攜帶"-s"選項。
  步驟3和步驟4同上面的介紹。
   2.一些小技巧
  JMeter/RMI要求建立一個從客戶端到遠程服務器的連接。這就會用到測試人員所選擇的端口號,默認值是1099。JMeter/RMI還要求建立一個反向連接,目的是從遠程服務器向客戶端返回測試采樣結果。這就會用到一個更高數字的端口號。如果在JMeter客戶端與JMeter遠程服務器之間存在任何防火牆或者網絡過濾器,那么測試人員就需要確保它們已經被正確配置,並允許相關連接通信。如果有必要,請使用監聽軟件來觀察通信的過程。
  如果JMeter運行在Suse  Linux上,下面這些技巧對測試人員可能會有幫助。默認的安裝可能會啟動防火牆。在這種情況下,遠程測試將無法正常工作。如果測試人員發現連接被拒絕后,可以通過下面的選項打開debugging。從JMeter 2.3.1版本開始,RMI注冊由JMeter遠程服務器啟動;不過相關選項依然可以通過JMeter命令行傳遞。例如,"jmeter -s -Dsun.rmi.loader.logLevel=verbose"(省略了-J前綴)。另外這些屬性還可以被定義在system.properties文件中。
  解決的方法是從etc/hosts中刪除對127.0.0.1和127.0.0.2的回送(Loopback)。 當127.0.0.2的回送無效時,jmeter-server將無法連接到Rmiregistry。
  替換:
  `dirname $0`/jmeter -s "$@"
  為:
  HOST="-Djava.rmi.server.hostname=[computer_name][computer_domain]
  -Djava.security.policy=`dirname $0`/[policy_file]"
  `dirname $0`/jmeter $HOST -s "$@"
同時創建一個規則(Qolicy)文件,添加[computer_name][computer_domain]行到/etc/hosts。
   3.如何使用不同端口號
  默認情況下,JMeter使用標准RMI端口號1099(這是可以改變的)。要想成功改變使用的端口號,需滿足如下條件:
  在遠程服務器,啟動Rmiregistry使用新端口號。
  在遠程服務器,啟動JMeter並預先定義server_port屬性。
  在客戶端,更新remote_hosts屬性,在其中包含remote host:port設置。
  從JMeter 2.1.1版本開始,jmeter-server腳本支持改變端口號。例如,假設 測試人員希望使用端口號1664(可能因為1099端口已經被其他應用程序占用了)。
   Windows系統 (DOS窗口中):
  C:\JMETER> SET SERVER_PORT=1664
  C:\JMETER> JMETER-SERVER [other options]
   UNIX系統:
  $ SERVER_PORT=1664 jmeter-server [other options]
  [N.B. use upper case for the environment variable]
  在這兩種情況下,腳本都會在指定端口上啟動Rmiregistry,接着以遠程服務器模式啟動JMeter,並已經定義了"server_port"屬性。
  選定的端口號將會被記錄到遠程服務器的jmeter.log文件中(Rmiregistry不會創建一個日志文件)。
   4.使用采樣批次
  測試計划中的監聽器會把它們的結果返回到JMeter客戶端,而JMeter客戶端默認情況下會將這些結果寫入到指定文件中,采樣結果會在產生后立即發回JMeter客戶端。這樣就會對網絡和JMeter客戶端產生很大的壓力。用戶可以通過設置一些屬性,來改變默認操作。
  模式(Mode)(采樣結果發送模式)默認是Standard。
  Standard:在采樣結果產生后立即發送。
  Hold:將采樣結果保存在一個數組中,直到測試結束。這可能會占用遠程服務器的大量內存。
  Batch:當計數器或者時間超過閾值之后,發送保存的采樣結果。
  Statistical:當計數器或者時間超過閾值之后,以概要的形式發送采樣結果;采樣結果以線程組(Thread Group)名稱和采樣標簽(Sample Label)進行概要統計。積累的數據域包括:elapsed time、latency、bytes、sample count、error count,其他數據域將會被丟棄。
  Stripped:將成功采樣的響應數據移除。
  StrippedBatch:將成功采樣的響應數據移除,並批次發送。
  Custom implementation:將模式參數設置為測試人員的客戶化采樣發送器的類名。該類必須實現接口SampleSender,並且類的構造函數只有一個RemoteSampleListener型的參數。
  如下屬性會影響Batch和Statistical模式。
  num_sample_threshold:一個批次中的采樣數目(默認為100)。
  time_threshold:等待的毫秒數(默認為60秒)。


免責聲明!

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



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