天天看點

使用JMeter的Java請求功能測試Hetty性能

 1.jmeter介紹

  2.啟動jmeter

  進入jmeter的bin目錄,然後執行:

  sudo ./jmeter.sh

  3.原始的測試方法

  在沒有使用jmeter前,我對hetty的性能測試,都是通過自己寫多線程代碼去完成的,相當苦逼,相當麻煩,不過也能鍛煉自己的編碼能力,我先貼出比較原始的測試方法,如下:

public class rpchessianclient {

public static void main(string[] args) {

string url = "http://localhost:8081/apis/hello";

hessianproxyfactory factory = new hessianproxyfactory();

executorservice es = executors.newfixedthreadpool(10);

int size = 1000000;

final countdownlatch cdl = new countdownlatch(size);

try {

long start = system.currenttimemillis();

factory.setuser("client1");

factory.setpassword("client1");

factory.setoverloadenabled(true);

final hello basic = (hello) factory.create(hello.class,

url);

for (int i = 0; i < size; i++) {

es.submit(new runnable() {

@override

public void run() {

string u=basic.hello("guolei");

//system.out.println(u);

cdl.countdown();

}

});

cdl.await();

long time = system.currenttimemillis() - start;

system.out.println("sayhello:");

system.out.println("耗時:" + (double) time / 1000 + " s");

system.out.println("平均:" + ((double) time) / size +" ms");

system.out.println("tps:" + (double) size / ((double) time / 1000));

// system.out.println("hello, " + s.getmail());

} catch (malformedurlexception e) {

e.printstacktrace();

} catch (interruptedexception e) {

}finally{

es.shutdown();

 4.使用jmeter來進行現代化測試

  我們要使用jmeter來測試hetty,由于hetty是一款基于hessian和netty的rpc産品,我們必須使用jmeter的java請求功能來進行測試,java請求是指jmeter對java class進行性能測試。首先我們需要編寫測試用例:

  1)建立java工程。

  2)引入apachejmeter_java.jar 、apachejmeter_core.jar以及測試所需要的jar(jar包在jmeter目錄的lib/ext目錄中)。

  3)繼承abstractjavasamplerclient類開始編寫主業務。如下:

public class hettytest extends abstractjavasamplerclient {

private static string label = "hettytest";

/**

* 執行runtest()方法前會調用此方法,可放一些初始化代碼

*/

public void setuptest(javasamplercontext arg0) {

* jmeter測試用例入口

public sampleresult runtest(javasamplercontext arg0) {

sampleresult sr = new sampleresult();

sr.setsamplelabel(label);

try { // 這裡調用我們要測試的java類,這裡我調用的是一個test類

map<string,string> map = getdefaultparameters().getargumentsasmap();

sr.samplestart(); // 記錄程式執行時間,以及執行結果

test.execute(map.get("ip"),map.get("port"));

sr.sampleend();

sr.setsuccessful(true);

} catch (throwable e) {

sr.setsamplerdata(e.getmessage());

sr.setsuccessful(false); // 用于設定運作結果的成功或失敗,如果是"false"則表示結果失敗,否則則表示成功

return sr;

* jmeter界面中可手工輸入參數,代碼裡面通過此方法擷取

public arguments getdefaultparameters() {

arguments args = new arguments();

args.addargument("ip", "localhost");

args.addargument("port", "8081");

return args;

* 執行runtest()方法後會調用此方法.

public void teardowntest(javasamplercontext arg0) {

  test類是我測試邏輯,如下:

public class test {

public static void execute(string ip,string port) throws malformedurlexception {

string url = "http://"+ip+":"+port+"/apis/hello";

final hello basic = (hello) factory.create(hello.class, url);

//system.out.println("sayhello:" + basic.hello("guolei"));

  代碼中都有注釋,按照注釋實際操作去了解。  system.out等的輸出會顯示在啟動jmeter時的指令視窗内,但過多的輸出會影響性能的準确性。

 代碼中都有注釋,按照注釋實際操作去了解。  system.out等的輸出會顯示在啟動jmeter時的指令視窗内,但過多的輸出會影響性能的準确性。

  4)将項目打為jar包,放到jmeter目錄下的lib/ext下(将項目依賴的jar也放到此目錄)。

  5)重新開機jmeter。

  5.jmeter使用

  1)選中主界面左側的“測試計劃”,右鍵菜單->添加->threads(users)->線程組。

  2)再選中剛才新增的"線程組",右鍵菜單->添加->sampler->java請求。

  3)再選中剛才新增的"java請求",右鍵菜單->添加->螢幕->聚合報告。

  4)ctrl + r,開始運作, ctrl + e,清除曆史結果。

使用JMeter的Java請求功能測試Hetty性能

  6.檢視測試結果

使用JMeter的Java請求功能測試Hetty性能

  聚合報告中基本已經包含我們所關心的幾個資料了:

  samples -- 本次場景中一共完成了多少個transaction

  average -- 平均響應時間

  median -- 統計意義上面的響應時間的中值

  90% line -- 所有transaction中90%的transaction的響應時間都小于xx

  min -- 最小響應時間

  max -- 最大響應時間

  ps: 以上時間的機關均為ms

  error -- 出錯率

  troughput -- 吞吐量,機關:transaction/sec

  kb/sec -- 以流量做衡量的吞吐量

最新内容請見作者的github頁:http://qaseven.github.io/