1. 程式人生 > >壓力測試 使用Jmeter進行RPC壓力測試

壓力測試 使用Jmeter進行RPC壓力測試

全棧工程師開發手冊 (作者:欒鵬)

Jmeter

wget -c http://mirrors.hust.edu.cn/apache//jmeter/binaries/apache-jmeter-5.0.tgz

java Request主要機制是:實現Jmeter自帶介面完成java Request請求,具體操作如下:

實現Jmeter自帶介面

1.開啟Java編譯器,我使用的是eclipse, 新建一個專案"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;

public class PerformenceTest extends AbstractJavaSamplerClient {
	 private SampleResult results;
     private String testStr;

    //設定傳入的引數,可以設定多個,已設定的引數會顯示到Jmeter的引數列表中
    @Override
    public Arguments getDefaultParameters() {
    	Arguments params = new Arguments();
        //定義一個引數,顯示到Jmeter的引數列表中,第一個引數為引數預設的現實名稱,第二個引數為預設值
        params.addArgument("testStr","abc");
        return params;
    }
    //測試前工作
    @Override
    public void setupTest(JavaSamplerContext context) {
    	results = new SampleResult();
        testStr=context.getParameter("testStr","");
        if(testStr!=null && testStr.length()>0){
                results.setSamplerData(testStr);
        }
    }
    

    // 測試執行的迴圈體,根據執行緒數和迴圈次數的不同可執行多次,類似於LoadRunner中的Action方法
	@Override
    public SampleResult runTest(JavaSamplerContext context) {
		 int len=0;
         //定義一個事務,表示這是事務的起始點,類似於LoadRunner的lr.start_transaction
         results.sampleStart();
         testStr = context.getParameter("testStr");
         len = testStr.length();
         //定義一個事務,表示這是事務的結束點,類似於LoadRunner的lr.end_transaction
         results.sampleEnd();
         results.setDataEncoding("utf-8");
         if(len<5){
                  System.out.println(testStr);
                 results.setResponseCode("testStr."+testStr);
                  //用於設定執行結果的成功或失敗,如果是false表示失敗,true表示成功。
                  results.setSuccessful(false);
         }else{
                  results.setResponseCode("testStr."+testStr);
                  results.setSuccessful(true);
         }
         return results;
    }
    //測試後工作
    public void teardownTest(JavaSamplerContext context) {
        super.teardownTest(context);
    }

  //Jmeter不執行main函式。
    public static void main(String[] args) {
        Arguments params = new Arguments();
        params.addArgument("testStr", "1111");//設定引數,並賦予預設值 
        JavaSamplerContext arg0 = new JavaSamplerContext(params);
        PerformenceTest test = new PerformenceTest();
        test.setupTest(arg0);
        test.runTest(arg0);
        test.teardownTest(arg0);
        System.exit(0);
    }


}

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

7.執行Jmeter,新增一個執行緒組,然後在該執行緒組下面新增一個Java請求(在Sampler中),在Java請求的類名稱中選擇咱們剛建立的類"app。TestLength",在下面引數列表的"testStr"後面輸入要測試的字串,然後新增一個監聽器(聚合報告),設定一下模擬的使用者數就可以測試了。如果測試不成功,Jmeter會在它自己個輸出框中丟擲這個字串。