【轉】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秒)。
相關文章
相關標籤/搜索