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,清除曆史結果。
6.檢視測試結果
聚合報告中基本已經包含我們所關心的幾個資料了:
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/