java jmeter_使用Jmeter中的Java Request进行性能测试
在使用jmeter進行性能測試的時候,有可能會需要通過一些腳本去測試性能,(比如通過sokeeper的api去測試sokeeper的讀寫性能)。這時,我們可以通過Java?Request實現,以下是操作步驟。
首先創建一個maven?project。
因Jmeter的Java?Request腳本依賴Jmeter的一些核心jar包,所以我們要maven項目的pom文件中添加Jmeter的一些依賴包:ApacheJMeter_core、ApacheJMeter_java:
編寫Java?Sample,繼承AbstractJavaSample,并重寫以下方法:
public?Arguments?getDefaultParameters();可選,定義可用參數及默認值;
·??public?void?setupTest(JavaSamplerContext?arg0):可選,測試前執行,做一些初始化工作;
·??public?SampleResult?runTest(JavaSamplerContext?arg0);必選,實現自定義請求;
·??public?void?teardownTest(JavaSamplerContext?arg0):可選,測試結束時調用;
示例代碼:
import?org.apache.curator.RetryPolicy;
import?org.apache.curator.framework.CuratorFramework;
import?org.apache.curator.framework.CuratorFrameworkFactory;
import?org.apache.curator.retry.ExponentialBackoffRetry;
import?org.apache.curator.utils.EnsurePath;
import?org.apache.jmeter.config.Arguments;
import?org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import?org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import?org.apache.jmeter.samplers.SampleResult;
public?class?CuratorRequestSample?extends?AbstractJavaSamplerClient?{
protected?CuratorFramework?client?=?null;
protected?long?subCount?=?1l;
protected?long?TOTAL_SUB_COUNT?=?100000l;
/**
*?定義可用參數及默認值
*/
public?Arguments?getDefaultParameters()?{
Arguments?params?=?new?Arguments();
params.addArgument("connect_str",?"192.168.103.136:2181,192.168.103.154:2181");
//?設置參數,并賦予默認值0
return?params;
}
/**
*?可選,測試前執行,做一些初始化工作,在Jmeter執行的時候,一個Thread只執行一次setupTest方法
*/
public?void?setupTest(JavaSamplerContext?context)?{
String?connect_str?=?context.getParameter("connect_str");
RetryPolicy?retryPolicy?=?new?ExponentialBackoffRetry(1000,?4);
client?=
CuratorFrameworkFactory.builder().connectString(connect_str)
.connectionTimeoutMs(3000).namespace("curator_sample")
.sessionTimeoutMs(5000).retryPolicy(retryPolicy).build();
client.start();
EnsurePath?ensure?=?new?EnsurePath("/curator_sample/setData");
try?{
ensure.ensure(client.getZookeeperClient());
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
/**
*?可選,測試結束時調用,用于資源釋放,一個Thread只執行一次
*/
public?void?teardownTest(JavaSamplerContext?context)?{
client.close();
}
/**
*?必選,實現自定義請求
*/
public?SampleResult?runTest(JavaSamplerContext?arg0)?{
SampleResult?resuts?=?new?SampleResult();
resuts.sampleStart();
try?{
byte[]?bytes?=?client.getData().forPath("/setData");
resuts.setSuccessful(true);
}?catch?(Exception?e)?{
resuts.setSuccessful(false);
}
resuts.sampleEnd();
return?resuts;
}
}
然后,把項目打成jar包,并將包放到${jmeter_home}/lib/ext/目錄下。如還需要依賴第三方jar,需要將第三方的jar也放到${jmeter_home}/lib/ext/目錄下。
啟動Jmeter。
創建線程組:
創建Java?Request?Sample:
此時,會在Java請求頁面的“類名稱”下拉列表中看到我們之前寫的Java?Request腳本:
選中其中一個要測試的腳本,可以看到配置的參數:
然后再添加Summary?Report即可,保存測試計劃。設置線程組屬性,執行測試計劃。即可。
優化技巧一
很多情況下我們在編寫Java?Sample時,需要編寫多個Java?Sample,且這些Java?Sample之間,擁有共同的資源初始化操作、資源釋放操作,只是在核心業務不同而已,這時,我們可以封裝一個基類。例:
import?org.apache.curator.RetryPolicy;
import?org.apache.curator.framework.CuratorFramework;
import?org.apache.curator.framework.CuratorFrameworkFactory;
import?org.apache.curator.retry.ExponentialBackoffRetry;
import?org.apache.curator.utils.EnsurePath;
import?org.apache.jmeter.config.Arguments;
import?org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import?org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import?org.apache.jmeter.samplers.SampleResult;
/**
*?Curator的Java請求測試基類
*
*?@author?majian
*?@version?1.0,?2016-2-22
*?@since?1.0,?2016-2-22
*/
public?abstract?class?CuratorBaseRequest?extends?AbstractJavaSamplerClient?{
protected?CuratorFramework?client?=?null;
protected?long?subCount?=?1l;
protected?long?TOTAL_SUB_COUNT?=?100000l;
/**
*?定義可用參數及默認值
*/
public?Arguments?getDefaultParameters()?{
Arguments?params?=?new?Arguments();
params.addArgument("connect_str",?"192.168.103.136:2181,192.168.103.154:2181");//?設置參數,并賦予默認值0
return?params;
}
/**
*?可選,測試前執行,做一些初始化工作,在Jmeter執行的時候,一個Thread只執行一次setupTest方法
*/
public?void?setupTest(JavaSamplerContext?context)?{
String?connect_str?=?context.getParameter("connect_str");
RetryPolicy?retryPolicy?=?new?ExponentialBackoffRetry(1000,?4);
client?=
CuratorFrameworkFactory.builder().connectString(connect_str)
.connectionTimeoutMs(3000).namespace("curator_sample")
.sessionTimeoutMs(5000).retryPolicy(retryPolicy).build();
client.start();
EnsurePath?ensure?=?new?EnsurePath("/curator_sample/setData");
try?{
ensure.ensure(client.getZookeeperClient());
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
/**
*?可選,測試結束時調用,用于資源釋放,一個Thread只執行一次
*/
public?void?teardownTest(JavaSamplerContext?context)?{
client.close();
}
/**
*?必選,實現自定義請求
*/
public?SampleResult?runTest(JavaSamplerContext?arg0)?{
SampleResult?resuts?=?new?SampleResult();
resuts.sampleStart();
try?{
testHandler();
resuts.setSuccessful(true);
}?catch?(Exception?e)?{
resuts.setSuccessful(false);
}
resuts.sampleEnd();
return?resuts;
}
/**
*?核心業務執行功能實現,只需實現此接口即可
*?@throws?Exception
*/
public?abstract?void?testHandler()?throws?Exception;
}
然后我們可以創建不同的Java請求,繼承這個基類,只需實現testHandler()方法即可。如:
curator獲取數據的Java?Request:
public?class?GetDataRequest?extends?CuratorBaseRequest?{
public?void?testHandler()?throws?Exception?{
byte[]?bytes?=?client.getData().forPath("/setData");
}
}
Curaotr設置數據的Java?Request:
import?org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
public?class?SetDataRequest?extends?CuratorBaseRequest?{
private?byte[]?a100?=?new?byte[100];
public?void?setupTest(JavaSamplerContext?context)?{
for?(int?i?=?0;?i?
a100[i]?=?'A';
}
super.setupTest(context);
}
public?void?testHandler()?throws?Exception?{
client.setData().forPath("/setData",?a100);
}
}
這樣,可以避免大量的冗余代碼。
優化技巧二
在編寫完Java?Sample后,每次都需要我們打成jar包,然后再復制jar包到${jmeter_home}\lib\ext下,然后再重起jmeter,這樣操作比較繁瑣。這時,我們可以通過在maven項目中添加一個maven插件來幫助我們簡化操作。
org.apache.maven.plugins
maven-antrun-plugin
copy-files
package
overwrite="true"?/>
run
如此,我們便可在執行mvn?package命令的時候,自動將項目打包,并將包復制到指定的目錄下了,我們只需再重啟jmeter就可以了。
總結
以上是生活随笔為你收集整理的java jmeter_使用Jmeter中的Java Request进行性能测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python open写入_Python
- 下一篇: java io 缓存读取_Java 文件