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

【轉】JMeter學習(十八)JMeter測試Java(二)

sets interval permsize int 文件 不同 時間 結果 argument

實例:

服務為:將輸入的兩個參數通過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需要以管理員身份打開,否則會出現:

技術分享

【轉】JMeter學習(十八)JMeter測試Java(二)