jmeter基於java二次開發


前言

針對非http協議需要進行測試,對於這些協議,市場上可能沒有現成的工具可以直接使用。這時候我們就可以通過編寫相應的Java采樣器來做自己的工作,高效的進行性能測試工作。

環境准備

          java環境已經搭建好了

     jmeter環境已經搭建好了

          idea開發環境已經配置

二次開發前提

  • 需要 lib/ext 中的 Apache JMeter_core.jar
  • 擴展 Java 請求也需要 Apache JMeter_ java.jar
  • 擴展 HTTP 請求需要 Apache JMeter_ http.jar
  • 導入jar包,自己導入

Jmeter Java 采樣器

 

public Arguments getDefaultParameters();                  可選,定義可用參數和默認值,獲取接口參數;
public void setupTest(JavaSamplerContext arg0);可選, 初始化工作相當於setUp(); 
public SampleResult runTest(JavaSamplerContext arg0);必選, 相當於 Action;
public void teardownTest(JavaSamplerContext arg0);可選, 相當於 tearDown();

方法執行順序

getDefaultParameters() > setupTest(JavaSamplerContext arg0) > runTest(JavaSamplerContext arg0) > teardownTest(JavaSamplerContext arg0)

常用方法

  • addArgument("name", "value") 定義參數
  • sampleStart()定義了一個事務的開始,類似於lr_start_transaction的LR,就像LR一樣,事務之間不要放不相關的代碼
  • sampleEnd() 定義一個事務的結束,類似於lr_end_transaction的LR
  • setSuccessful(true, false) 設置運行結果的成功或失敗。Jmeter統計成功和失敗的次數,可以反映在聚合報告中。

類繼承

做二次開發的時候,大家都知道自己定義的類需要繼承AbstractJavaSamplerClient,但是大家要知道為什么要繼承這個類而不是其他類。為了更清楚的理解代碼,我們來看一下代碼如下:

public abstract class AbstractJavaSamplerClient implements JavaSamplerClient {
    private static final Logger log = LoggerFactory.getLogger(AbstractJavaSamplerClient.class);
    private static final org.apache.log.Logger oldLogger = LoggingManager.getLoggerForClass();

    public AbstractJavaSamplerClient() {
    }

    public void setupTest(JavaSamplerContext context) {
        log.debug(this.getClass().getName() + ": setupTest");
    }

    public void teardownTest(JavaSamplerContext context) {
        log.debug(this.getClass().getName() + ": teardownTest");
    }

    public Arguments getDefaultParameters() {
        return null;
    }

    /** @deprecated */
    @Deprecated
    protected org.apache.log.Logger getLogger() {
        return oldLogger;
    }

    protected Logger getNewLogger() {
        return log;
    }
}

從上面的代碼我們可以看出,有構造方法和三種常用方法。這三種方法熟悉嗎?是的,前面已經提到過。但是,仍然缺少一個 runTest 方法,那么它在哪里呢?它必須在此類 JavaSamplerClient 中。讓我們繼續代碼如下:

public interface JavaSamplerClient {
    void setupTest(JavaSamplerContext var1);

    SampleResult runTest(JavaSamplerContext var1);

    void teardownTest(JavaSamplerContext var1);

    Arguments getDefaultParameters();
}

好了,既然知道了這四種方法的來源,在自己的類中,來實現功能,其實就可以重寫這四種方法來實現自己的功能了。有了思路,我們真的來寫個demo。

輸出兩個參數,

package com.czq.com;

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_router: jiapengchu
 * @date: 2021-10-17
 *
 */

public class PalindromeDemo extends AbstractJavaSamplerClient {
    private String name;
    private int age;

    @Override
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        return null;
    }

    @Override
    public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
        params.addArgument("name","tom");
        params.addArgument("age","18");
        return params;
    }
}

 

導出jar 包放到 lib/ext 目錄下查看

 

完整代碼

package com.czq.com;

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_router: jiapengchu
 * @date: 2021-10-17
 *
 */

public class PalindromeDemo extends AbstractJavaSamplerClient {
//    聲明變量
    private String name;
    private String age;



    @Override
    public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
//        設置參數
        params.addArgument("name","tom");
        params.addArgument("age","18");
        return params;
    }
    @Override
    public void setupTest(JavaSamplerContext arg0) {
//        獲取變量值
        name = arg0.getParameter("name");
        age = arg0.getParameter("age");
    }
    @Override
    public SampleResult runTest(JavaSamplerContext arg0) {
        SampleResult sr = new SampleResult();
//        邏輯處理
        sr.setSamplerData("Request parameters name The values of are:"+name);
        sr.setSamplerData("Request parameters age The values of are:"+age);
        try{
            // jmeter start statistics response time mark   \
            sr.sampleStart();
            int iage = Integer.parseInt(age);
            if(iage<0){
                sr.setResponseData("age can not be possive number","utf-8");
                sr.setSuccessful(false);
            }
            else if(iage==0) {
                sr.setResponseData("age must be >0","utf-8");
                sr.setSuccessful(false);
            }else {
                sr.setResponseData(name+"恭喜,注冊成功","utf-8");
                sr.setSuccessful(true);
            }
        } catch(Throwable e) {
            sr.setSuccessful(false);
            e.printStackTrace();

        }finally {
            sr.sampleEnd();
        }
        return sr;

    }

}

導出jar包后,測試

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 到此演練結束


免責聲明!

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



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