1. 程式人生 > >使用JMeter進行效能測試(Java請求)

使用JMeter進行效能測試(Java請求)

看了兩篇如何使用JMeter在HTTP請求及資料庫方面做效能測試的文章(如下兩個連結),感受到這款工具的強大及易用。我在這裡延續下,對JMeter裡另外一種常用的測試型別:"Java請求",做個入門級的介紹。

"Java請求"是指JMeter對Java Class進行效能測試。在沒有使用JMeter這類工具前,我對Class的效能測試,基本都是通過自己寫個迴圈,然後單執行緒或併發著去執行,最終輸出整體所耗時間。

一、啟動JMeter

首先下載:

http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi

無論是Linux

/WIndows,最簡單的方法是下載Binary版本

啟動圖形介面方法:

Linux下執行 $安裝目錄/bin/jmeter.sh

Windows下執行 $安裝目錄/bin/jmeter.bat

二、編寫用例

針對"Java請求"型別的測試,需要基於JMeter測試框架編寫測試用例。

1、新建一個普通的Java工程

2、將 $安裝目錄/lib/ 目錄引入工程

3、新建一個Java Class,如下例中的"PerformanceTest ",並繼承"AbstractJavaSamplerClient"

程式碼示例:

Java程式碼  收藏程式碼
  1. /** 
  2.  *  
  3.  */  
  4. package
     test;  
  5. import org.apache.jmeter.config.Arguments;  
  6. import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;  
  7. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;  
  8. import org.apache.jmeter.samplers.SampleResult;  
  9. /** 
  10.  * @author xuanyin 
  11.  *  
  12.  */  
  13. public class PerformanceTest extends
     AbstractJavaSamplerClient {  
  14.         /** 
  15.          *  
  16.          */  
  17.         private static long start = 0;  
  18.         private static long end = 0;  
  19.         /** 
  20.          * 執行runTest()方法前會呼叫此方法,可放一些初始化程式碼 
  21.          */  
  22.         public void setupTest(JavaSamplerContext arg0) {  
  23.                 // 開始時間  
  24.                 start = System.currentTimeMillis();  
  25.         }  
  26.         /** 
  27.          * 執行runTest()方法後會呼叫此方法. 
  28.          */  
  29.         public void teardownTest(JavaSamplerContext arg0) {  
  30.                 // 結束時間  
  31.                 end = System.currentTimeMillis();  
  32.                 // 總體耗時  
  33.                 System.err.println("cost time:" + (end - start) / 1000);  
  34.         }  
  35.         /** 
  36.          * JMeter介面中可手工輸入引數,程式碼裡面通過此方法獲取 
  37.          */  
  38.         public Arguments getDefaultParameters() {  
  39.                 Arguments args = new Arguments();  
  40.                 return args;  
  41.         }  
  42.         /** 
  43.          * JMeter測試用例入口 
  44.          */  
  45.         @Override  
  46.         public SampleResult runTest(JavaSamplerContext arg0) {  
  47.                 SampleResult sr = new SampleResult();  
  48.                 try {  
  49.                         // Start  
  50.                         sr.sampleStart();  
  51.                         /** 
  52.                          * Start~End內的程式碼會被JMeter 
  53.                          * 納入計算吞吐量的範圍內,為了使 
  54.                          * 效能結果合理,無關程式碼不必放此 
  55.                          */  
  56.                         // TODO  
  57.                         /** 
  58.                          * True/False可按測試邏輯傳值 
  59.                          * JMeter會對失敗次數做出統計 
  60.                          */  
  61.                         sr.setSuccessful(true);  
  62.                         // End  
  63.                         sr.sampleEnd();  
  64.                 } catch (Exception e) {  
  65.                         e.printStackTrace();  
  66.                 }  
  67.                 return sr;  
  68.         }  

Tips:

* 可以新增main(String[] args)方法,更直觀地在本地除錯無誤後,再把程式碼移至runTest()方法內

* System.out等的輸出會顯示在啟動JMeter時的命令視窗內,但過多的輸出會影響效能的準確性

4、完成用例後,將工程匯出成Jar,放置於 $安裝目錄/lib/ext/ 下,其它依賴的Jar放置於 $安裝目錄/lib/ 下

5、啟動(或重啟)JMeter

三、執行用例

1、選中主介面左側的“測試計劃”,右鍵選單->新增->Threads(Users)->執行緒組

2、再選中剛才新增的"執行緒組",右鍵選單->新增->Sampler->Java請求

3、再選中剛才新增的"Java請求",右鍵選單->新增->監視器->聚合報告

(聚合報告即是效能測試結果報告)

4、在"Java請求"選項卡中可以選擇你想測試的類名;在"執行緒組"選項卡中可以輸入想迴圈的次數及併發執行緒數

5、一切就緒後,點選選單欄上的"執行"->啟動,JMeter即會按第4步的配置開始執行,選中"聚合報告"即可檢視實時狀態

Tips:

* 如果在"Java請求"選項卡中未找到編寫的測試用例類名:

則請先確認用例是否繼承了JMeter框架;

其次保證用例的Jar檔案在 $安裝目錄/lib/ext/ 下;

嘗試重啟JMeter

如有使用問題,歡迎給我留言一起探討。

養成給程式碼做效能對比的習慣,是一名合格程式設計師必不可缺的素質。