使用JMeter做壓力測試

jopen 10年前發布 | 113K 次閱讀 JMeter 性能測試和優化

1.下載Jmeter

地址:http://jmeter.apache.org/download_jmeter.cgi 

2.啟動jmeter

運行bin/jmeter.bat

3.添加線程組

TestPlan節點上右鍵,Add-->Threads(Users)-->Thread Group

使用JMeter做壓力測試

Number of Threads (Users):要模擬的并發用戶量。
Ramp Up Period (in seconds):在多長時間內均勻啟動所有的線程。比如Number of Threads設為10Ramp Up Period設為1,則jmeter每隔0.1秒啟動1個線程。
Loop Count:單用戶任務重復執行的次數。可以設為Forever,這樣jmeter就不會自動停止,需要強制終止。
還可以設置Scheduler Configuration。這里有兩組設置:指定StartTimeEnd Timejmeter在特定的時間區段內執行工作;Startup Delay表示從當前時刻開始延遲多長時間開始運行,Duration設定運行時長。

4.用jmetr向服務器發送Java Request

當然傳統的方法是讓jmeter向服務器發送Http RequestFTP Request,但這里不作展示。

假如我們要模擬多用戶并發向Zookeeper Cluster發送查詢znode的請求,首先要寫1個程序來指定單用戶的請求行為。

新建一個Java Project,導入jmeter/lib/ext下的兩個jar包:ApacheJMeter_core.jarApacheJMeter_java.jar

使用JMeter做壓力測試


package  test;

import  org.apache.jmeter.config.Arguments;
import  org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import  org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import  org.apache.jmeter.samplers.SampleResult;
import  org.apache.zookeeper.ZooKeeper;

public  class  Create extends  AbstractJavaSamplerClient{
     private  String nodePath= null ;
     private  String timeout_str= null ;
     private  SampleResult results;

      //設置傳入的參數,可以設置多個,已設置的參數會顯示到Jmeter的參數列表中
     public  Arguments getDefaultParameters() {
         Arguments params = new  Arguments();
         params.addArgument( "nodePath" , "" );
         params.addArgument( "timeout_str" , "5000" );
         return  params;
     }

     //初始化方法,實際運行時每個線程僅執行一次,在測試方法運行前執行
     public  void  setupTest(JavaSamplerContext arg0) {
         results = new  SampleResult();
         nodePath = arg0.getParameter( "nodePath" );   //獲取在Jmeter中設置的參數值
         if  (nodePath != null  && nodePath.length() > 0 ) {
             results.setSamplerData(nodePath);
         }
         timeout_str=arg0.getParameter( "timeout_str" );
         if  (timeout_str != null  && timeout_str.length() > 0 ) {
             results.setSamplerData(timeout_str);
         }
     }

      //測試執行的循環體,根據線程數和循環次數的不同可執行多次
     @Override
     public  SampleResult runTest(JavaSamplerContext arg0) {
         int  timeout=Integer.parseInt(timeout_str);
         boolean  success= true ;
         results.sampleStart();      //事務的起點
         try  {
             ZooKeeper zkp= new  ZooKeeper( "localhost:2181" ,timeout, null );
             zkp.getData(nodePath, false , null );
             zkp.close();
         } catch  (Exception e) {
             success= false ;
         } finally {
             results.sampleEnd();    //事務的終點
             results.setSuccessful(success);     //設置本次事務成功或失敗
         }
         return  results;
     }

     //結束方法,實際運行時每個線程僅執行一次,在測試方法運行結束后執行
     public  void  teardownTest(JavaSamplerContext arg0) {
     }
}
project導出為jar包,放到jmeter/lib/ext下,重啟jmeter

Thread Group上是右擊,Add-->Sampler-->Java Request

使用JMeter做壓力測試

設置nodePathtimeout的值。

5.添加Listener

TestPlan上右擊,Add-->Listener-->Aggregate ReportJmeter生成的報告有多種,這里以Aggregate Report為例。

使用JMeter做壓力測試

可以指定將report保存到某個文件,如上圖中所示保存到report.csv,在非GUI模式下運行Jmeter這是非常必要的。

 

可以在bin/jmeter.properties中設置report文件的默認格式,你可能要經常要更改這兩項配置:jmeter.save.saveservice.output_format=csv #默認有文件格式為jtl jmeter.save.saveservice.default_delimiter=\t #默認使用","作為域之間的分隔符

 

點擊Configure可以自己定義report中你所關心的數據項。

使用JMeter做壓力測試

比如我只關心每個請求是否成功,以及每個請求所用的時間,所以只勾選了兩項。

6.為Jmeter安裝PerfMon插件

PerfMon用來監控ServerCPUI/OMemory等情況。

1. 插件下載地址:http://code.google.com/p/jmeter-plugins/wiki/PerfMon 

2. 把JMeterPlugins.jar放到jmeter客戶端的jmeter/lib/ext下。

3. 啟動jmeter,添加Listener時你就看到PerfMon Metrics Collectors了。

4. 另外還需要把下載下來的PerfMon解壓后放到所有的被測試的服務器上,并運JMeterPlugins/serverAgent/startAgent.sh,默認工作在4444端口。

5. 使用PerfMon截圖:

使用JMeter做壓力測試

再次提醒一下,在非GUI模式下運行Jmeter時指定把result保存到一個文件是非常必要的。

7.非GUI模式下運行Jmeter

具體方法是:先在GUI模式下創建TestPlan,保存為jmx文件。命令行啟動jmeter./ApacheJMeter -n -t testplan.jmx (選項-n表示non-GUI-t指定TestPlan文件)。運行結束后Aggregate ReportPerfMon Metrics Collector就會保存在你指定的文件中。把保存PerfMon Metrics Collector的文件拖到Jmerter GUI中就可以看到CUP等使用狀況拆線圖了。

8.遠程啟動jmeter

應用進場景:用一臺機器(稱為JMeter客戶端)上的jmeter同時啟動另外幾臺機器(稱為JMeter遠程服務器)上的jmeter

1. 保證jmeter客戶端和jmeter遠程服務器采用相同版本的jmeterJVM

2. jmeter客戶端和jmeter遠程服務器最好在同一個網段內。

3. 在jmeter遠程服務器上運行JMETER_HOME/bin/jmeter-server (UNIX)或者JMETER_HOME/bin/jmeter-server.bat(Windows)腳本 。

4. 在jmeter客戶端上修改/bin/jmeter.properties文件,找到屬性"remote_hosts",使用JMeter遠程服務器的IP地址作為其屬性值。可以添加多個服務器的IP地址,以逗號作為分隔。 
例如:
#remote_hosts=127.0.0.1
remote_hosts=9.115.210.2:1099,9.115.210.3:1099,9.115.210.4:1099
# RMI port to be used by the server (must start rmiregistry with same port)
server_port=1099

5. 在jmeter客戶端上啟動jmeter:
./jmeter -n -t plan.jmx -r #選項-r表示遠程啟動(remote)
jmeter客戶端會自動向jmeter遠程服務器上分發測試計劃。


轉載:http://www.cnblogs.com/zhangchaoyang/articles/2530731.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!