使用JMeter進行效能測試(Java請求)
看了兩篇如何使用JMeter在HTTP請求及資料庫方面做效能測試的文章(如下兩個連結),感受到這款工具的強大及易用。我在這裡延續下,對JMeter裡另外一種常用的測試型別:"Java請求",做個入門級的介紹。
"Java請求"是指JMeter對Java Class進行效能測試。在沒有使用JMeter這類工具前,我對Class的效能測試,基本都是通過自己寫個迴圈,然後單執行緒或併發著去執行,最終輸出整體所耗時間。
一、啟動JMeter
首先下載:
http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi
無論是Linux
啟動圖形介面方法:
Linux下執行 $安裝目錄/bin/jmeter.sh
Windows下執行 $安裝目錄/bin/jmeter.bat
二、編寫用例
針對"Java請求"型別的測試,需要基於JMeter測試框架編寫測試用例。
1、新建一個普通的Java工程
2、將 $安裝目錄/lib/ 目錄引入工程
3、新建一個Java Class,如下例中的"PerformanceTest ",並繼承"AbstractJavaSamplerClient"
程式碼示例:
Java程式碼- /**
- *
- */
-
package
- 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;
- /**
- * @author xuanyin
- *
- */
-
public class PerformanceTest extends
- /**
- *
- */
- private static long start = 0;
- private static long end = 0;
- /**
- * 執行runTest()方法前會呼叫此方法,可放一些初始化程式碼
- */
- public void setupTest(JavaSamplerContext arg0) {
- // 開始時間
- start = System.currentTimeMillis();
- }
- /**
- * 執行runTest()方法後會呼叫此方法.
- */
- public void teardownTest(JavaSamplerContext arg0) {
- // 結束時間
- end = System.currentTimeMillis();
- // 總體耗時
- System.err.println("cost time:" + (end - start) / 1000);
- }
- /**
- * JMeter介面中可手工輸入引數,程式碼裡面通過此方法獲取
- */
- public Arguments getDefaultParameters() {
- Arguments args = new Arguments();
- return args;
- }
- /**
- * JMeter測試用例入口
- */
- @Override
- public SampleResult runTest(JavaSamplerContext arg0) {
- SampleResult sr = new SampleResult();
- try {
- // Start
- sr.sampleStart();
- /**
- * Start~End內的程式碼會被JMeter
- * 納入計算吞吐量的範圍內,為了使
- * 效能結果合理,無關程式碼不必放此
- */
- // TODO
- /**
- * True/False可按測試邏輯傳值
- * JMeter會對失敗次數做出統計
- */
- sr.setSuccessful(true);
- // End
- sr.sampleEnd();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return sr;
- }
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
如有使用問題,歡迎給我留言一起探討。
養成給程式碼做效能對比的習慣,是一名合格程式設計師必不可缺的素質。