jmeter之自定義java請求性能測試


一、環境准備
        1、新建一個java工程
        2、導入jar包:ApacheJMeter_core.jar     ApacheJMeter_java.jar
                這兩個jar是使用jmeter最基礎的jar,能夠讓你的代碼在jmeter中運行起來,如果在寫代碼的過程中需要其他的jar,自行導入。
 
二、寫代碼前該知道的
 
        1、如果想要讓你的代碼在jmeter中運行起來,在創建類的時候需要去繼承AbstractJavaSamplerClient抽象類或者是實現JavaSamplerClient接口
            AbstractJavaSamplerClient抽象類是JavaSamplerClient接口的子類,當你不需要復寫所有的需要復寫的方法時,那么你只需要去繼承AbstractJavaSamplerClient抽象類即可。
 
            如果你選擇了實現JavaSamplerClient接口,那么你需要復寫的方法有:
                         public SampleResult runTest(JavaSamplerContext context) {}
                         public void setupTest(JavaSamplerContext context) {}
                         public void teardownTest(JavaSamplerContext context) {}
                         public Arguments getDefaultParameters() {}
            這4個方法就必須要復寫,但是如果選擇繼承AbstractJavaSamplerClient這個抽象類,那么只需要復寫你需要的方法即可。
 
        2、方法說明:
                    public Arguments getDefaultParameters() {}
                            這個方法由Jmeter在進行添加javaRequest時第一個運行,它決定了你要在GUI中默認顯示出哪些屬性。
                    public void setupTest(JavaSamplerContext context) {}
                            這個方法相當於loadrunner中的init,我們可以用它來進行一些初始化的動作。
                    public SampleResult runTest(JavaSamplerContext context) {}
                            這個方法相當於loadrunner中的action,我們的核心測試代碼就在這里了。
                    public void teardownTest(JavaSamplerContext context) {}
                            這個方法相當於loadrunner中的end,收尾的工作可以由它來做。
 
        3、除了以上2點,我們一般還需要去實現Serializable,序列化標記接口,這樣可以讓我們的類去實現序列化。
 
三、代碼書寫
package com.lingfeng.jmeter.practice;


import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

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 MyJavaRequest extends AbstractJavaSamplerClient implements Serializable  {

	private static final long serialVersionUID = 1L;

	private String sUrl;//存儲用戶輸出的url
	
	private static final String URL_NAME="URL" ;//設置GUI頁面顯示的變量名稱
	//設置GUI頁面默認顯示的變量值,默認值就是訪問百度
	private static final String URLVALUE_DEFAULT="http://www.baidu.com";
	//resultData變量用來存儲響應的數據,目的是顯示到查看結果樹中。
	private String resultData;
    
	StringBuilder sbResultData = new StringBuilder();

	/*
	 * 這個方法用來控制顯示在GUI頁面的屬性,由用戶來進行設置。
	 * 此方法不用調用,是一個與生命周期相關的方法,類加載則運行。
	 * (non-Javadoc)
	 * @see org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient#getDefaultParameters()
	 */
	@Override
	public Arguments getDefaultParameters() {
		Arguments arguments = new Arguments();
		arguments.addArgument(URL_NAME, String.valueOf(URLVALUE_DEFAULT));
		return arguments;
	}



	@Override
	public void setupTest(JavaSamplerContext context) {
		sUrl = context.getParameter(URL_NAME, URLVALUE_DEFAULT);
		if(sUrl.length()==0){
			sUrl="http://www.baidu.com";//假如用戶沒有設置url,那么就讓他訪問百度,哈哈。
		}
		
	}

	@Override
    public SampleResult runTest(JavaSamplerContext context) {
    	
	
		/*
    	 * SampleResult這個類是用來將測試結果輸出到查看結果樹中的。   
    	 * 並且也是用來控制事務的開始和結束的。 	
    	 */
        SampleResult results = new SampleResult();
        results.setSampleLabel("測試"+sUrl+"網站訪問速度了啊!!");

        try{
	
			URL url = new URL(sUrl);
			URLConnection conn = url.openConnection();
			InputStream in = conn.getInputStream();

			byte[] buffer = new byte[1024];
			int len;
            //事務開始標記			
			results.sampleStart();
			while((len=in.read(buffer))!=-1){
				resultData =  new String(buffer,"UTF-8");//將每次讀到的頁面返回信息存儲到resultData中
				sbResultData.append(resultData);//每讀到一次,添加到sb中。
			
			}
	        in.close();
        	
        }catch (MalformedURLException e) {
			results.setSuccessful(false);
			e.printStackTrace();
		}catch (IOException e) {
			results.setSuccessful(false);
			e.printStackTrace();
		}catch(Exception e){//如果發生異常,則捕捉,並且發送事務失敗的消息。
        	results.setSuccessful(false);
        	e.printStackTrace();
        }finally{
        	//標記事務結束
        results.sampleEnd();
        }
        
        results.setSuccessful(true);
		resultData = sbResultData.toString();//將所有讀到的數據轉換為字符串
		results.setResponseData(resultData,null);//將數據打印到查看結果樹當中
    	results.setDataType(SampleResult.TEXT);
        return results;
    }


}

 

四、jmeter運行java代碼
        1、將代碼打包成jar
        2、把打包成的jar放在\apache-jmeter-2.12\lib\ext路徑下
        3、打開jmeter GUI,添加線程組,再添加一個java請求,如下圖:
 
        4、添加查看結果樹,運行后結果如下:
 
 
五、補充事項
    當我們的代碼在運行時發生異常,就會被打印在doc窗口中
 
我這里沒有發生異常,所以沒有數據,當發生異常時就會打印在這里。注意觀察,有助於調試代碼
 
六、最后的話
  其實由以上的代碼可以看出,這一段測試代碼其實沒有太大的測試意義,就是模擬了一個HTTP請求訪問一個網站。
  但是當我們需要進行一段代碼的性能測試的時候,這樣來進行書寫,並且在runTest方法中進行調用后,那么就可以測試出這段代碼的性能如何。
 
 
  經常總結,互相學習!!
 
 
 
 
 


免責聲明!

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



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