天天看點

在Jmeter中使用自定義編寫的Java測試代碼

我們在做性能測試時,有時需要自己編寫測試腳本,很多測試工具都支援自定義編寫測試腳本,比如LoadRunner就有很多自定義腳本的協定,比如"C Vuser","Java Vuser"等協定.同樣,Jmeter也支援自定義編寫的測試代碼,不過與LoadRunner不同的是,Jmeter沒有自帶編譯器,需要借助第三方編譯器才能實作.下面舉一個簡單的Java自定義測試代碼例子,使用Java編譯器編寫測試代碼(Java編譯器可以用Eclipse,JBulider等),實作功能為:在測試前輸入任意一個字元串,然後判斷該字元串的長度是否大于5,如果大于則測試結果成功,否則測試結果位失敗,然後在放到Jmeter中模拟10個使用者測試,同時運作這段代碼,具體實作如下:

        1.打開Java編譯器,建立一個項目"TestLength",然後建立一個包"app".

        2.從Jmeter的安裝目錄lib/ext中拷貝兩個檔案"ApacheJMeter_core.jar"和"ApacheJMeter_java.jar"到"Tester"的項目中,然後引入這兩個JAR檔案.(具體的引入方法參考各個Java編譯器的使用方法)

        3.在"app"包中建立一個類,名字叫"TestLength",不過這個類要繼承"AbstractJavaSamplerClient"類,如果項目引入步驟二中的兩個檔案,就可以找到"AbstractJavaSamplerClient"類了.

    4."TestLength"類在繼承"AbstractJavaSamplerClient"類的同時也會繼承四個方法,分别是"getDefaultParameters","setupTest","runTest"和"teardownTest"方法."getDefaultParameters"方法主要用于設定傳入的參數;"setupTest"方法為初始化方法,用于初始化性能測試時的每個線程."runTest"方法為性能測試時的線程運作體;"teardownTest"方法為測試結束方法,用于結束性能測試中的每個線程.

    5.具體實作代碼如下:

package app;

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 com.passpod.core.t8.*;

/**

 * @author樂以忘憂

 *

 * TODO To change the template for this generated type comment go to

 * Window - Preferences - Java - Code Style - Code Templates

 */

public class TestLength extends AbstractJavaSamplerClient{

     private SampleResult results;

     private String testStr;

 //初始化方法,實際運作時每個線程僅執行一次,在測試方法運作前執行,類似于LoadRunner中的init方法

     public void setupTest(JavaSamplerContext arg0) {

          results = new SampleResult();

          testStr = arg0.getParameter("testString", "");

          if (testStr != null && testStr.length() > 0) {

                 results.setSamplerData(testStr);

  }

 }

 //設定傳入的參數,可以設定多個,已設定的參數會顯示到Jmeter的參數清單中

     public Arguments getDefaultParameters() {

             Arguments params = new Arguments();

             params.addArgument("testStr", "");   //定義一個參數,顯示到Jmeter的參數清單中,第一個參數為參數預設的顯示名稱,第二個參數為預設值

            return params;

 //測試執行的循環體,根據線程數和循環次數的不同可執行多次,類似于LoadRunner中的Action方法

     public SampleResult runTest(JavaSamplerContext arg0) {

          int len = 0;

          results.sampleStart();     //定義一個事務,表示這是事務的起始點,類似于LoadRunner的lr.start_transaction

          len = testStr.length();

          results.sampleEnd();     //定義一個事務,表示這是事務的結束點,類似于LoadRunner的lr.end_transaction

          if(len < 5){

                  System.out.println(testStr);

                  results.setSuccessful(false);   //用于設定運作結果的成功或失敗,如果是"false"則表示結果失敗,否則則表示成功

         }else   

                 results.setSuccessful(true);

        return results;

 //結束方法,實際運作時每個線程僅執行一次,在測試方法運作結束後執行,類似于LoadRunner中的end方法

     public void teardownTest(JavaSamplerContext arg0) {

     }

}

        6.把上面的例子打包,然後把生成的"TestLength.jar"檔案拷貝到Jmeter的安裝目錄lib/ext下.

        7.運作Jmeter,添加一個線程組,然後在該線程組下面添加一個Java請求(在Sampler中),在Java請求的類名稱中選擇咱們剛建立的類"app.TestLength",在下面參數清單的"testStr"後面輸入要測試的字元串,然後添加一個監聽器(聚合報告),設定一下模拟的使用者數就可以測試了.如果測試不成功,Jmeter會在它自己個輸出框中抛出這個字元串.

        通過上面的例子我們可以發現,使用Jmeter自定義Java測試代碼,配合Jmeter自帶的函數,就可以實作出LoadRunner中"Java Vuser"協定的絕大多數功能,而且是沒有使用者數限制和完全免費的(嘿嘿).上面的例子非常簡單,而且沒有任何實際意義,隻是一個簡單的Jmeter測試代碼示例,用于抛磚引玉,希望大家一起交流,共同 進步.