jmeter 測試java協議經驗總結


    對java協議的良好支持,是jmeter比loadrunner優秀的地方,但是坑也不少,本文將相關點都整理下來備忘   

一. 依賴的jar包

  使用IDE開發jemter java協議腳本時,需要導入以下幾個包,否則會報找不到Class或者其他詭異問題,以下的包在jmeter\lib或者jmeter\lib\ext下找得到: 

   avalon-framework.jar、
  jorphan.jar、
  commons-logging.jar、
  ApacheJMeter_core.jar、
  ApacheJMeter_java.jar、
   logkit-2.0.jar

   需要注意的是: jmeter的jorphan.jar非常古怪,如果我們開發的腳本也用到類似的jar,請務必保證jmeter\lib下該jar不會被替換且不能存在多個版本,否則啟動jmeter報錯:

     Uncaught Exception java.lang.NoSuchMethodError: org.apache.jorphan.gui.GuiUtils.makeScrollableMenu(Ljavax/swing/JMenu;)V. See log file for details.

 二. 編碼示范

      使用jmeter開發java測試腳本的常規格式如下:  

/**
 * 
 */
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;

/**
 * 
 * 
 */
public class PerformanceTest extends AbstractJavaSamplerClient {

/**
         * 每個線程初始化時會調用且僅調用一次,可放一些初始化代碼
         */
        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 result = new SampleResult();
        boolean isSuccessful = false;
        try {
          String strategy = arg0.getParameter("strategy");
          String pin = arg0.getParameter("pin");
          /*

  * 其他構造參數代碼

  */
 result.sampleStart();

 /*

    執行測試代碼

 */

 if(xxx==xxx){

  isSuccessful = true;
 } else {
  isSuccessful = false;

  //打印失敗信息
  //logger.error("接口調用失敗,結果信息");
 }
} catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
} finally {
  result.sampleEnd();
  result.setSuccessful(isSuccessful);
}
return result;

}

}

 三. 路徑的一些說明

  開發java協議腳本時候常常需要讀取一些配置文件的內容,這里又主要分兩種情況,spring容器配置文件和普通文本類

 1. spring容器類配置

 讀取 spring容器配置文件的讀取建議使用 ClassPathXmlApplicationContext類而非FileSystemXmlApplicationContext,因為后者是要寫死路徑的,不利於后面的打包並部署到jmeter環  境里,示范代碼:

 

  ApplicationContext applicationContext = null;  

public void setupTest(JavaSamplerContext context) { try { applicationContext = new ClassPathXmlApplicationContext("jsf-consumer.xml"); } catch (Exception e) { e.printStackTrace(); } }

 

         非Spring容器的配置文件,則需要使用如下代碼讀取:

    

 InputStream is = null;
 try {
   String str = null;
   PropertiesTest pt = new PropertiesTest();
   Properties pro = new Properties();
   is = pt.getClass().getResourceAsStream("/ptest.properties");
   pro.load(is);
   System.out.println("PAGESIZE-->" + pro.get("PAGESIZE"));
    System.out.println("CURRENT_PAGE-->" + pro.get("CURRENT_PAGE"));
  } catch (FileNotFoundException e) {
    e.printStackTrace();
  } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  }finally{
    try {
         if(is!=null){
            is.close();
         }
    } catch (IOException e) {
         e.printStackTrace();
    }
}

  

     為了能讓代碼取到xml文件需要按照約定來配置:

         (1) 非maven項目,需要放在項目的src目錄下,如下圖

     

 

 

(2) maven項目,除了src目錄外還可以放在src/main/resource目錄下

  四. 打包和部署

      測試代碼打包步驟如下:

      1. 右鍵--->export

     

2. 選擇Runnable JAR file

 

3. 進行配置信息和保存路徑的設置

注意,如果launch configuration找不到目標類,則可以執行一次這個類的Main函數

4.單擊"Finish",即可得到一個jar和一個對應名字的目錄,比如abcTest.jar和abcTest_lib 目錄

5. 將上面的文件和目錄直接拷貝到jmeter/lib/ext目錄下即可

 

通常情況下,以上步驟不會有任何問題,如果非常不幸遇到詭異問題,請參照以下文章:http://www.cnblogs.com/onmyway20xx/p/4260216.html

將生成的abcTest.jar放在lib/ext目錄,將abcTest_lib目錄下文件去除jmeter本身自帶的幾個jar、剩余的jar拷貝到lib目錄下!

 

 

   


免責聲明!

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



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