1. 程式人生 > >JMeter學習(十八)JMeter測試Java(二)

JMeter學習(十八)JMeter測試Java(二)

例項:

服務為:將輸入的兩個引數通過IO存入檔案;

 

1、開啟MyEclipse,編寫Java程式碼

服務:

複製程式碼

複製程式碼

package test;

import java.io.File;
import java.io.PrintWriter;

public class OutputService {
    public static void output(String filename, int a, int b) throws Exception {
        PrintWriter out = new PrintWriter(new File(filename));
        out.write(a + ":" + b);
        out.close();
    }
}

複製程式碼

複製程式碼

測試類:

複製程式碼

複製程式碼

package test;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;

//服務為:將輸入的兩個引數通過IO存入檔案;
public class PerformenceTest implements JavaSamplerClient {
    private SampleResult results;
    private String a;
    private String b;
    private String filename;

    // 設定傳入的引數,可以設定多個,已設定的引數會顯示到Jmeter的引數列表中
    public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
        params.addArgument("filename", "0");// 設定引數,並賦予預設值0
        params.addArgument("a", "0");// 設定引數,並賦予預設值0
        params.addArgument("b", "0");// 設定引數,並賦予預設值0
        return params;
    }

    // 初始化方法,實際執行時每個執行緒僅執行一次,在測試方法執行前執行
    public void setupTest(JavaSamplerContext arg0) {
        results = new SampleResult();
    }

    // 測試執行的迴圈體,根據執行緒數和迴圈次數的不同可執行多次
    public SampleResult runTest(JavaSamplerContext arg0) {
        b = arg0.getParameter("b"); // 獲取在Jmeter中設定的引數值
        a = arg0.getParameter("a"); // 獲取在Jmeter中設定的引數值
        filename = arg0.getParameter("filename"); // 獲取在Jmeter中設定的引數值
        results.sampleStart();// jmeter 開始統計響應時間標記
        try {
            OutputService test = new OutputService();
            test.output(filename, Integer.parseInt(a), Integer.parseInt(b));
            results.setSuccessful(true);
            // 被測物件呼叫
        } catch (Throwable e) {
            results.setSuccessful(false);
            e.printStackTrace();
        } finally {
            results.sampleEnd();// jmeter 結束統計響應時間標記
        }
        return results;
    }

    // 結束方法,實際執行時每個執行緒僅執行一次,在測試方法執行結束後執行
    public void teardownTest(JavaSamplerContext arg0) {
    }

    /*
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Arguments params = new Arguments();
        params.addArgument("a", "0");// 設定引數,並賦予預設值0
        params.addArgument("b", "0");// 設定引數,並賦予預設值0
        params.addArgument("filename","abc.txt");
        JavaSamplerContext arg0 = new JavaSamplerContext(params);
        PerformenceTest test = new PerformenceTest();
        test.setupTest(arg0);
        test.runTest(arg0);
        test.teardownTest(arg0);
    }
    */
}

複製程式碼

複製程式碼

生成jar包,放在JMeter_HOME/lib/ext目錄下。

 

2、設定JMeter

以管理員身份開啟JMeter,並建立Java Request後,結構如下圖所示:

在Java請求中發現了自己新建的測試類:

 

我們在JMeter中發現引數有三個:

在這裡我們使用到了兩個函式:

(1)_Random生成隨機整數;

(2)_RandomString生成隨機字串;

 

線上程組中設定併發執行緒數為5,儲存後即可執行;

 

聚合報告:

結果成功,成功生成了5個檔案:

 

3、遇到的問題

3.1 Export為Jar File導致Java Request的類名稱無法找到;

3.2 JMeter java.lang.OutOfMemoryError: PermGen space問題:

  在JMeter.bat 中修改:

  set HEAP=-Xms512m -Xmx1024m

  set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m

  set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50%

  set TENURING=-XX:MaxTenuringThreshold=2

  set RMIGC=-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000

  set PERM=-XX:PermSize=256m -XX:MaxPermSize=512m

3.3 JMeter需要以管理員身份開啟,否則會出現: