jmeter之java請求


本文轉自:http://blog.csdn.net/xiazdong/article/details/7873767
一、核心步驟
 
1.創建一個Java工程;
2.將JMeter的lib目錄下的jar文件添加進此工程的Build Path;需要引入三個包ApacheJMeter_core.jar,ApacheJMeter_java.jar,logkit-2.0.jar
3.創建一個類並實現JavaSamplerClient接口或繼承AbstractJavaSamplerClient,並重寫:
  • public Arguments getDefaultParameters():設置可用參數及的默認值;
  • public void setupTest(JavaSamplerContext arg0):每個線程測試前執行一次,做一些初始化工作;
  • public SampleResult runTest(JavaSamplerContext arg0):開始測試,從arg0參數可以獲得參數值;
  • public void teardownTest(JavaSamplerContext arg0):測試結束時調用;

getDefaultParameters() --> setupTest(JavaSamplerContext context) --> runTest(JavaSamplerContext context) --> teardownTest(JavaSamplerContext context)

4.Export為Runnable Jar File
5.將此jar包放入JMETER_HOME\lib\ext目錄;
6.以管理員身份打開JMeter;
7.創建線程組、Java Request、結果樹,進行測試;
二 測試
package test;

import java.io.File;
import java.io.PrintWriter;

public class OutputService {
     public static void output(String filename,int a, int b) throws Exception {  
           PrintWriter out = new PrintWriter(new File(filename));  
               out.write(a+":"+b);  
              out.close();  
          }  

}
測試類:

package test;  
02.   
03.   
04. import org.apache.jmeter.config.Arguments;  
05. import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;  
06. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;  
07. import org.apache.jmeter.samplers.SampleResult;  
08.   
09.   
10. public class PerformenceTest implements JavaSamplerClient {  
11. private SampleResult results;  
12. private String a;  
13. private String b;  
14. private String filename;  
15.   
16.   
17. // 設置傳入的參數,可以設置多個,已設置的參數會顯示到Jmeter的參數列表中  
18. public Arguments getDefaultParameters() {  
19. Arguments params = new Arguments();  
20. params.addArgument("filename", "0");//設置參數,並賦予默認值0  
21. params.addArgument("a", "0");//設置參數,並賦予默認值0  
22. params.addArgument("b", "0");//設置參數,並賦予默認值0  
23. return params;  
24. }  
25.   
26.   

27. // 初始化方法,實際運行時每個線程僅執行一次,在測試方法運行前執行  
28. public void setupTest(JavaSamplerContext arg0) {  
29. results = new SampleResult();  
30. }  
31.   
32.   
33. // 測試執行的循環體,根據線程數和循環次數的不同可執行多次  
34. @Override  
35. public SampleResult runTest(JavaSamplerContext arg0) {  
36. b = arg0.getParameter("b"); // 獲取在Jmeter中設置的參數值  
37. a = arg0.getParameter("a"); // 獲取在Jmeter中設置的參數值  
38. filename = arg0.getParameter("filename"); // 獲取在Jmeter中設置的參數值  
39. results.sampleStart();// jmeter 開始統計響應時間標記  
40. try {  
41. OutputService test = new OutputService();  
42. test.output(filename,Integer.parseInt(a), Integer.parseInt(b));  
43.  results.setSuccessful(true);  
44. // 被測對象調用  
45. } catch (Throwable e) {  
46. results.setSuccessful(false);  
47. e.printStackTrace();  
48. } finally {  
49. results.sampleEnd();// jmeter 結束統計響應時間標記  
50. }  
51. return results;  
52. }  
53.   
54.   
55. // 結束方法,實際運行時每個線程僅執行一次,在測試方法運行結束后執行  
56. public void teardownTest(JavaSamplerContext arg0) {  
57. }  
58. public static void main(String[] args) {  
59.         // TODO Auto-generated method stub  
60. Arguments params = new Arguments();  
61. params.addArgument("a", "0");//設置參數,並賦予默認值0  
62. params.addArgument("b", "0");//設置參數,並賦予默認值0  
63.         JavaSamplerContext arg0 = new JavaSamplerContext(params);  
64.         PerformenceTest test = new PerformenceTest();  
65.         test.setupTest(arg0);  
66.         test.runTest(arg0);  
67.         test.teardownTest(arg0);  
68.     }  
69. }  

Export 為 Runnable Jar File;

 

 

2、設置JMeter

以管理員身份打開JMeter,並創建Java Request后,結構如下圖所示:

 

 

查看聚合報告,分析其中的所有統計數據,得出性能測試結論。

 

如果做Web應用的性能測試,例如只有一個登錄的請求,那么在Aggregate Report中,會顯示一行數據,共有10個字段,含義分別如下。

 

Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這里顯示的就是 Name 屬性的值

 

Samples:表示你這次測試中一共發出了多少個請求,如果模擬10個用戶,每個用戶迭代10次,那么這里顯示100

 

Average:平均響應時間——默認情況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時,也可以以Transaction 為單位顯示平均響應時間

 

Median:中位數,也就是 50% 用戶的響應時間

 

90% Line:將所有響應時間從小到大排列,第90%的那個響應時間,此數值代表絕大多數用戶的響應實際時間,有一定參考價值

 

Min:最小響應時間

 

Max:最大響應時間

 

Error%:本次測試中出現錯誤的請求的數量/請求的總數

 

Throughput:吞吐量——默認情況下表示每秒完成的請求數(Request per Second)

 

KB/Sec:每秒從服務器端接收到的數據量,相當於Throughput/Sec

 

6.1監控插件

很多時候,測試性能都需要查看內存和CPU等信息來判斷系統瓶頸,關於CPU和內存的監控,Jmeter並沒有很好的支持,只能通過系統的資源監控器來觀察,一閃而過不會記錄下來。谷歌開發了一款專門監控的Jmeter插件JMeterPlugins,彌補了這方面的不足,目前使用的版本為JMeterPlugins-Standard-1.2.0。

首先將下載的文件進行解壓,得到JMeterPlugins-Standard-1.2.0與ServerAgent,將JMeterPlugins-Standard-1.2.0\lib\ext\JMeterPlugins-Standard.jar包復制到JMeter的lib目錄下面的ext目錄下面,重新啟動Jmeter。

然后,將serverAgent目錄及下面的文件復制到我們測試的服務器上,windows的話運行startAgent.bat,linux的話打運行startAgent.sh。

准備工作完成,開始進行性能測試。

6.2分布式測試

有時一台壓力測試機無法滿足性能測試的需求的情況下,需要搭建分布式的Jmeter測試系統,使用Jmeter自帶分布式的性能測試功能。

 

首先開始分布式性能測試之前:

1 所有的壓力機的防火牆應該關閉

2 所有的壓力機應該都在同一個局域網中

3 確保所有壓力機的JMeter可以訪問待測服務器

4 確保所有壓力機的JMeter版本都是一致的

\bin\jmeter-server.bat

 

6-3.png

 

2 性能測試主機進入Jmeter主界面,並且啟用遠程控制

 

 可以選擇啟動某個附屬壓力機,也可以選擇全部啟動,通過遠程啟動,便可驅動遠程開啟的JMeter同時進行並發測試,這樣實現了分布式的性能測試。測試過程中附屬壓力機的處理器和內存可能全部占滿,需要監控壓力機的硬件資源防止其崩潰死機,測試結束之后再點擊遠程全部停止,關閉附屬壓力機。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM