之前已經分享過如何用java進行壓力測試,然而,那種直接用代碼壓測的缺乏圖形化GUI的直觀。同時,只能夠單機進行壓測,有些情況下,比如webservice的壓測需要大量的序列化反序列化xml,這些很消耗CPU之類的資源的壓力測試,單機根本不足。
基於上述的原因,我選擇了jmeter來進來一些壓力測試用例的實施,像普通的http壓力測試的對jmeter來說都小菜一碟,同時分佈式的壓力測試對jmeter來說更是對用戶透明的。jmeter的資料在網上已經很足夠,就不怎麼重複了,這次想要重點講的是如何定義自己的壓力測試的用例。
類似於之前的壓力測試模板,jmeter也提供了模板給我們,它就是在線程組下新建sample-》java請求,我們在java請求的選擇中會有幾個默認的test可以讓我們選,這幾個都是demo,我們今天要做的就是模仿下這個demo來實現自己的test,來讓jmeter加載我們的test。
在這個紅線框出的就是我們自己定義的test。
要實現這樣一個test,只需要我們寫個類實現jmeter提供的
AbstractJavaSamplerClient 模板類
,然後實現裏面的public SampleResult runTest(JavaSamplerContext javaSamplerContext),然後將該類打包成jar包,並且扔進去${jmeter_home}/lib/ext/下,jmeter就會自己在java請求面板中加載。
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
SampleResult results = new SampleResult();//這個一定要定義,jmeter調用根據這個來計算調用率
try {
results.sampleStart();//開始調用
results.setSampleLabel("lsz");//設置聚合報告中的名字
Thread.sleep(100);
results.setSuccessful(true);
results.setResponseCodeOK();
results.setBodySize(100);
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
results.sampleEnd();//一定要end,不然jmeter不統計這次結果~
}
return results;
}
同樣的,我們可以自己定義初始化的參數,只需要重寫
public Arguments getDefaultParameters()返回參數的列表就可以了。
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("SleepTime", String.valueOf(1000L));
params.addArgument("SleepMask", "0x" + Long.toHexString(1023L).toUpperCase(Locale.ENGLISH));
return params;
}