1. 程式人生 > >jmeter之java請求二次開發

jmeter之java請求二次開發

說明與步驟

  1. 原則上jmeter的java請求,可以壓測一切可使用java訪問的東西,包括Redis,MQ等等。
  2. 需要lib/ext中的ApacheJMeter_core.jar,如擴充套件java請求則還需要ApacheJMeter_java.jar,擴充套件http請求則需要ApacheJMeter_http.jar,依次類推,都在lib/ext中,另外lib中的avalon-framework-4.1.4.jar根據實際需要也會用到(jmeter3.2中名稱是framework)
  3. 下文中的程式碼,則是具體的被測類和測試類的編寫。(當然,你要先用eclipse建立工程,匯入前面說的jar包,再新建package,新建class,擼程式碼),完成後匯出被測jar包放到lib中,測試用的jar包放到lib/ext中。
  4. 新建java請求,就可以看到。並傳入響應的引數。比如method=add,num1=111,num2=222,然後點選執行,就可以看到結果,如下圖。
    這裡寫圖片描述

這裡寫圖片描述

程式碼例項

被測類

public class Calc {
public int add(int x, int y){
return x + y;
}

public int minus(int x, int y){
    return x - y;
}

}

測試類

package com.cmos.test;
/*
* 一般來說,擴充套件java請求通常需要的類有:
* AbstractJavaSamplerClient
* JavaSamplerContext 容器類
* SampleResult 結果統計類
* Argument 引數類
* */
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.config.Arguments;
import java.util.Random;

import com.cmos.JmeterTest.Calc;

public class TestCalc extends AbstractJavaSamplerClient {
/*
* 一般來說,需要定義全域性變數,是用來實現邏輯處理
* 包括控制變數、入參、結果。一般由被測方法決定
* */
private String method;
private int x;
private int y;
private String resultData;
Calc c = new Calc();
/*
* 通過getDefaultParameters()可以來定義入參
*
* */

public Arguments getDefaultParameters(){
    //定義屬性物件,用來新增GUI引數
    Arguments params = new Arguments();
    //新增一個GUI引數,名稱叫"method",值是"add"
    params.addArgument("method", "add");
    params.addArgument("num1","111");
    params.addArgument("num2",null);        
    return params;
}
   //每個執行緒測試前執行一次,做一些初始化工作;
public void setupTest(JavaSamplerContext arg0) {
}

//JavaSampleContext arg0()就是用來接收GUI所提交的
@Override
public  SampleResult runTest(JavaSamplerContext arg0) {
    // TODO Auto-generated method stub
    SampleResult sr = new SampleResult();
    try{
        //將GUI介面傳遞過來的值賦給全域性變數
        method = arg0.getParameter("method");
        x = Integer.parseInt(arg0.getParameter("num1",null));
        y = Integer.parseInt(arg0.getParameter("num2",null));
        //是表示請求開始計時
        sr.sampleStart();
        //實際測試不需要,模擬處理過程中所需消耗的時間

// Random rnd = new Random();
// Thread.sleep(rnd.nextInt(1000));

        //通過GUI傳遞的method引數來決定所執行的方法
        if(method.equals("add")){
            resultData = String.valueOf(c.add(x, y));
        }
        else if(method.equals("minus")){
            resultData = String.valueOf(c.minus(x, y));
        }
        if(resultData != null && resultData.length()>0){
            //設定響應資料為resutlData;也可以用sr.setSamplerData("OK");
            sr.setResponseData(resultData,null);
            //設定響應程式碼為0
            sr.setResponseCode("0000");
            //設定響應型別為text
            sr.setContentType(SampleResult.TEXT);
            //設定響應狀態為true
            sr.setSuccessful(true);
            //設定響應資訊
            sr.setResponseMessage("方法執行成功!");
        }
        else{
            sr.setResponseData(resultData,null);
            //設定響應程式碼為-9999
            sr.setResponseCode("-9999");
            //設定響應型別為txt
            sr.setContentType(SampleResult.TEXT);
            //設定響應狀態為true
            sr.setSuccessful(false);
            //設定響應資訊
            sr.setResponseMessage("方法執行失敗!");
        }   

    }
    catch(Exception e){
        sr.setResponseData(e.getMessage(),null);
        e.printStackTrace();
        sr.setResponseCode("-1");
        sr.setContentType(SampleResult.TEXT);
        sr.setSuccessful(false);
        sr.setResponseMessage("捕獲異常!");
    }
    finally{
        //表示請求結束計時
        sr.sampleEnd();
    }

    //表示返回這個SampleResult物件sr
    return sr;
}
public void teardownTest(JavaSamplerContext arg0) {
    // System.out.println(end);
    // System.out.println("The cost is"+(end-start)/1000);
}

}

其他參考連結