使用Jmeter進行RPC壓力測試
使用Jmeter進行RPC壓力測試
為了支援相關部門進行RPC協議的壓測,初步瞭解了Jmeter如何使用java請求進行壓測。
一、 下載Jmeter,進行解壓即可使用,適用於windows和linux。用的版本為apache-jmeter-3.2
二、需要建立可用的java工程。
使用Java sample進行壓測,需要建立一個類並實現JavaSamplerClient介面或繼承AbstractJavaSamplerClient,並重寫:
- public Arguments getDefaultParameters():設定可用引數的預設值;
- public void setupTest(JavaSamplerContext arg0):每個執行緒測試前執行一次,做一些初始化工作;
- public SampleResult runTest(JavaSamplerContext
arg0):開始測試,從arg0引數可以獲得引數值; - public void teardownTest(JavaSamplerContext arg0):測試結束時呼叫;
介面壓測的主要測試程式碼如下所示,main函式是方便除錯程式碼。motan的配置放在了setupTest中。 為了使用Jmeter進行測試在工程中新增本地依賴,依賴JMeter的lib目錄下的jar檔案ApacheJMeter_core.jar,ApacheJMeter_java.jar和jorphan.jar
public class PerformenceTest extends Abstract JavaSamplerClient {
private static AlgFeedServiceMotan algFeedServiceMotan=null;
private Logger log = getLogger();
// 初始化方法,實際執行時每個執行緒僅執行一次,在測試方法執行前執行
@Override
public void setupTest(JavaSamplerContext arg0){
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { "classpath:my.xml" });
algFeedServiceMotan = (AlgFeedServiceMotan) ctx.getBean("algFeedServiceRefer");
log.info("---- 啟動執行緒 ----");
}
// 結束方法,實際執行時每個執行緒僅執行一次,在測試方法執行結束後執行
@Override
public void teardownTest(JavaSamplerContext arg0){
log.info("---- 結束執行緒 ----");;
}
// 設定傳入的引數,可以設定多個,已設定的引數會顯示到Jmeter的引數列表中
@Override
public Arguments getDefaultParameters() {
Arguments args = new Arguments();
return args;
}
// 測試執行的迴圈體,根據執行緒數和迴圈次數的不同可執行多次
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
String ruids="xxxxx";
next = random.nextInt(22);
String[] uids={"yyyyy"};
SampleResult sampleResult = new SampleResult();
boolean success = true;
try {
sampleResult.sampleStart();
String str_uids = javaSamplerContext.getParameter("ruids");
String str_fids = javaSamplerContext.getParameter("uids");
RankedWeibo rankedWeibo = algFeedServiceMotan.rank(0,"fenzuxxx",ruids,uids);
if(rankedWeibo != null && rankedWeibo.getData() != null && 0 == rankedWeibo.getCode()){
success = true;
}else {
success = false;
}
} catch (Throwable e) {
success = false;
e.printStackTrace();
log.info(e.getMessage());
} finally {
sampleResult.sampleEnd(); // jmeter 結束統計響應時間標記
sampleResult.setSuccessful(success);
}
return sampleResult;
}
//Jmeter不執行main函式。
public static void main(String[] args) {
Arguments params = new Arguments();
params.addArgument("ruids", "xxxxx");//設定引數,並賦予預設值
params.addArgument("uids", "xxxx,xxx,xx");//設定引數,並賦予預設值
JavaSamplerContext arg0 = new JavaSamplerContext(params);
PerformenceTest test = new PerformenceTest();
test.setupTest(arg0);
test.runTest(arg0);
test.teardownTest(arg0);
System.exit(0);
}}
二、工程建好後。需要打成jar包供Jmeter呼叫
一般情況可以將工程直接打包為可執行檔案,再將jar包放在Jemter檔案的JMETER_HOME\lib\ext目錄即可。方法如下
- 直接Export為Runnable Jar File(eclipse和InteliJ IDEA方法各異)
- 在pom檔案中使用外掛打包
a.使用maven-assembly-plugin打包成獨立可執行的jar包。可以將java工程及其全部依賴jar進行打包
工程一般依賴了很多的jar包,而被依賴的jar又會依賴其他的jar包,這樣,當工程中依賴到不同的版本的spring時,在使用assembly進行打包時,
只能將某一個版本jar包下的spring.schemas檔案放入最終打出的jar包裡,這就有可能遺漏了一些版本的xsd的本地對映,導致報錯。
b.使用maven-shade-plugin可以解決這個問題,它能夠將所有jar裡的spring.schemas檔案 進行合併,在最終生成的單一jar包裡,spring.schemas包含了所有出現過的版本的集合。
那些資源要單獨打此類配置檔案,需要和開發溝通。
c.由於打成可執行jar包,配置motan服務時總有衝突出現。壓測時也可以採用maven-jar-plugin將工程打包(工程依賴的jar包不會一起打入)
採用maven-dependency-plugin進行依賴。maven-jar-plugin會將工程依賴的所有jar包放在target/lib 檔案中。
打包完成後,將jar包和lib檔案一起放入JMETER_HOME\lib\ext目錄即可。
另外在打包時需要將外部包ApacheJMeter_core.jar,ApacheJMeter_java.jar和jorphan.jar加入,打包時才不會報錯。
a.這裡我採用手動mvn install到本地倉庫,然後進行引用。版本名稱如下,並在pom中引入
<dependency>
<groupId>org.ApacheJmeterCore</groupId>
<artifactId>ApacheJmeterCore</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.ApacheJmeterJava</groupId>
<artifactId>ApacheJmeterJava</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.jorphan</groupId>
<artifactId>jorphan</artifactId>
<version>1.0</version>
</dependency>
b.在工程中新建資料夾lib,放入外部引用的這三個jar包。依賴本地
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ApacheJMeter_java.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ApacheJMeter_core.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>jorphan</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/logkit-2.0.jar</systemPath>
</dependency>
三、在Jmeter資料夾bin資料夾下開啟Jmeter
建立執行緒組、Java Request、結果樹,進行測試;
線上程組中右鍵選擇Sampler->java 請求,類名稱中出現自己寫的類,即打包成功可進行呼叫壓測。
相關文章
- JMeter使用jar進行壓力測試JMeterJAR
- webbench進行壓力測試Web
- Jmeter效能測試 —— 壓力模式JMeter模式
- 使用ab對nginx進行壓力測試Nginx
- jmeter壓力測試報告 - DEMOJMeter測試報告
- 在Rainbond上使用Locust進行壓力測試AI
- 使用orastress!進行資料庫壓力測試(zt)AST資料庫
- 效能壓力測試JMeter替代:LoadjitsuJMeter
- 使用Jmeter進行http介面測試JMeterHTTP
- 使用 Twisted Python 和 Treq 進行 HTTP 壓力測試PythonHTTP
- Jmeter 4.0壓力測試工具安裝及使用方法JMeter
- 如何對你Mac進行壓力測試?Mac
- 用mysqlslap對MySQL進行壓力測試MySql
- jmeter壓力測試實現負載均衡JMeter負載
- .net core 使用ConcurrentTest元件對方法進行壓力測試元件
- 如何對 ElasticSearch 叢集進行壓力測試Elasticsearch
- 對 Linux 核心進行壓力測試(轉)Linux
- ActiveMQ壓力測試工具(emqtt_benchmark和jmeter)MQQTJMeter
- JMeter 測試 thrift RPC 介面JMeterRPC
- 【SWINGBENCH】使用SwingBench對Oracle進行壓力測試Oracle
- jmeter 對 clickhouse 進行壓測的配置JMeter
- 對node工程進行壓力測試與效能分析
- 運維攻堅之jmeter壓力測試報錯運維JMeter
- 使用JMeter進行負載測試快速入門JMeter負載
- 效能工具之Jmeter壓測Thrift RPC服務JMeterRPC
- 效能工具之Jmeter壓測Hprose RPC服務JMeterROSRPC
- 效能測試進階實踐篇:10分鐘教你使用JMeter進行websocket測試!JMeterWeb
- JMeter 如何與 MySQL 進行整合測試JMeterMySql
- 利用jmeter進行資料庫測試JMeter資料庫
- ORACLE壓力測試Oracle
- laravel壓力測試Laravel
- MACOSXApacheab壓力測試MacApache
- NGINX壓力測試Nginx
- mysqlslap壓力測試MySql
- 壓力測試工具
- linux環境下使用jmeter進行分散式測試LinuxJMeter分散式
- 求助,jmeter 壓測 ,業務場景測試JMeter
- 使用LoadRunner進行壓力測試時如何選擇要錄製的協議?協議