1. 程式人生 > >jmeter知識總結(一)

jmeter知識總結(一)

stack 中一 use -h true ext str 工具 depend

Apache JMeter是一款純java編寫負載功能測試和性能測試開源工具軟件。相比Loadrunner而言,JMeter小巧輕便且免費,逐漸成為了主流的性能測試工具,是每個測試人員都必須要掌握的工具之一。

1. Jmeter安裝

1.1 JDK安裝

由於Jmeter是基於java開發,首先需要下載安裝JDK (略)。

Windows環境下檢測安裝情況如下:

技術分享圖片

Linux環境下檢測安裝情況如下:

技術分享圖片

1.2 JMeter安裝

1>官網下載地址:http://jmeter.apache.org/download_jmeter.cgi

2>下載:

技術分享圖片

3>下載完成後解壓zip或tgz包即安裝完成。

windows環境下,將包解壓即可使用。

(註意:編輯jmeter目錄/bin/jmeter.porperties文件中的language屬性值將其設置為默認中文顯示。)

技術分享圖片

Linux環境下,將包解壓亦即可使用。推薦編輯/etc/profile文件配置Jmeter的環境變量並用命令source /etc/profile讓配置生效,則在任意目錄下可以使用jmeter命令。

技術分享圖片

2.Jmeter使用(自定義Java腳本)

2.1 windows環境下

雙擊JMeter解壓路徑(apache-jmeter-4.0\bin)bin下面的jmeter.bat即可

技術分享圖片

如下顯示就是Jmeter的主界面:

技術分享圖片

右鍵點擊“測試計劃” -> “添加” -> “Threads(Users)” -> “線程組”,如下可在“線程組”界面中可以配置線程組名稱,線程數,準備時長(Ramp-Up Period(in seconds))循環次數,調度器等參數:

技術分享圖片

線程組參數詳解:
1> 線程數:虛擬用戶數。一個虛擬用戶占用一個進程或線程。設置多少虛擬用戶數在這裏也就是設置多少個線程數。
2> Ramp-Up Period(in seconds)準備時長:設置的虛擬用戶數需要多長時間全部啟動。如果線程數為10,準備時長為2,那麽需要2秒鐘啟動10個線程,也就是每秒鐘啟動5個線程。
3> 循環次數:每個線程發送請求的次數。如果線程數為10,循環次數為100,那麽每個線程發送100次請求。總請求數為10*100=1000 。如果勾選了“永遠”,那麽所有線程會一直發送請求,一到選擇停止運行腳本。
4> Delay Thread creation until needed:直到需要時延遲線程的創建。
5> 調度器:設置線程組啟動的開始時間和結束時間(配置調度器時,需要勾選循環次數為永遠)
6> 持續時間(秒):測試持續時間,會覆蓋結束時間
7> 啟動延遲(秒):測試延遲啟動時間,會覆蓋啟動時間
8> 啟動時間:測試啟動時間,啟動延遲會覆蓋它。當啟動時間已過,手動只需測試時當前時間也會覆蓋它。
9> 結束時間:測試結束時間,持續時間會覆蓋它。

右鍵點擊“線程組” -> “添加” -> “Sampler” -> “java請求”,如下可在“java請求”界面中可以選擇對應的自定義的java類,也可以手動在界面上修改參數值。

技術分享圖片

然後選擇保存即可生成xxx.jmx配置文件(可供在非GUI環境下即Linux上執行)

技術分享圖片

2.2 Linux環境下

首先,要把自己寫的java腳本打包及其運行所依賴的其他jar包都放到apache-jmeter-4.0\lib路徑下,然後若jar包有需要依賴的配置文件的話,通過配置apache-jmeter-4.0\bin\user.properties文件中的search_paths屬性來進行指定,如下:

技術分享圖片

然後,在JMeter解壓路徑(apache-jmeter-4.0\bin)bin下執行類似如下命令即可。

sh jmeter -n -t test.jmx -l result.jtl -j test.log

下面是我們使用非GUI 模式運行測試腳本時可以使用的一些命令:

  • -h 幫助 -> 打印出有用的信息並退出
  • -n 非 GUI 模式 -> 在非 GUI 模式下運行 JMeter
  • -t 測試文件 -> 要運行的 JMeter 測試腳本文件(可以在GUI模式下配置生成好直接再拿來用,需要的話再手動修改裏面的一些參數
  • -l 結果文件 -> 記錄結果的文件
  • -r 遠程執行 -> 啟動遠程服務
  • -H 代理主機 -> 設置 JMeter 使用的代理主機
  • -P 代理端口 -> 設置 JMeter 使用的代理主機的端口號
  • -j 保存日誌 ->記錄jmeter執行過程情況

(註意:如果安裝部署jmeter時設置了環境變量,則可以在任意目錄使用jmeter命令;如果未設置Jmeter的環境變量則在執行腳本的時候需要檢查當前目錄是否是jmetet的bin 目錄下。)

運行效果如下:

技術分享圖片

xxx.jtl文件內容如下:

技術分享圖片

執行結果可以使用 GUI 模式下的聚合報告查看,比如你想要看xxx.jtl 的報告,可以在Windows環境上打開JMeter GUI 界面 -> 測試計劃 -> 添加線程組 -> 添加聚合報告 -> 點擊"所有數據寫入一個文件"下的 "瀏覽..." 按鈕找到你剛生成的jtl 文件就可以對執行結果進行直觀分析了:

技術分享圖片

聚合報告參數詳解:
1> Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這裏顯示的就是 Name 屬性的值
2> #Samples:請求數——表示這次測試中一共發出了多少個請求,如果模擬10個用戶,每個用戶叠代10次,那麽這裏顯示100
3> Average:平均響應時間——默認情況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時,以Transaction 為單位顯示平均響應時間
4> Median:中位數,也就是 50% 用戶的響應時間
5> 90% Line:90% 用戶的響應時間
6> Min:最小響應時間
7> Max:最大響應時間
8> Error%:錯誤率——錯誤請求數/請求總數
9> Throughput:吞吐量——默認情況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的 Transaction per Second 數
10> KB/Sec:每秒從服務器端接收到的數據量,相當於LoadRunner中的Throughput/Sec

一般而言,性能測試中我們需要重點關註的數據有: #Samples 請求數,Average 平均響應時間,Min 最小響應時間,Max 最大響應時間,Error% 錯誤率及Throughput 吞吐量。

3.jmeter執行java請求代碼實例

在eclipse中新建maven項目,首先在pom.xml文件中加入jmeter的依賴:

            <!-- Jmeter dependency -->
	    <dependency>
	        <groupId>org.apache.jmeter</groupId>
	        <artifactId>ApacheJMeter_core</artifactId>
	        <version>4.0</version>
	        <scope>provided</scope>
	    </dependency>
	    <dependency>
	        <groupId>org.apache.jmeter</groupId>
	        <artifactId>ApacheJMeter_java</artifactId>
	        <version>4.0</version>
	        <scope>provided</scope>
	    </dependency>
然後新建測試方法類,具體如下代碼:
public class TestDemo {
    public int Tdemo(int a,int b){
        int sum = 0;
        sum = a+b;
        return sum;
    }
}  

再新建一個class文件,繼承AbstractJavaSamplerClient,

(備註:AbstractJavaSamplerClient類的四個方法.)

public Arguments getDefaultParameters();設置可用參數及的默認值,設置了在Jmeter中則要輸入。
public void setupTest(JavaSamplerContext arg0):每個線程測試前執行一次,做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0):開始測試,從arg0參數可以獲得參數值;
public void teardownTest(JavaSamplerContext arg0):測試結束時調用;

並重寫裏面的方法,具體如下代碼:

public class TestLength extends AbstractJavaSamplerClient{
    private SampleResult results; 
    private String a;
    private String b;
    private String sum;    
  //設置可用參數集的默認值;
    public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
        params.addArgument("num1","");
        params.addArgument("num2","" );
        return params;
    }
  
    //初始化方法,實際運行時每個線程僅執行一次,在測試方法運行前執行
    public void setupTest(JavaSamplerContext arg0) {
         results = new SampleResult();      
    }
    
    //測試執行的循環體,根據線程數和循環次數的不同可執行多次
    public SampleResult runTest(JavaSamplerContext arg0) {
         a = arg0.getParameter("num1");
         b = arg0.getParameter("num2");
         results.sampleStart();     //定義一個事務,表示這是事務的起始點
         try{
             TestDemo test = new TestDemo();
             sum = String.valueOf(test.Tdemo(Integer.parseInt(a), Integer.parseInt(b)));
            if (sum != null && sum.length() > 0) {
                 results.setResponseData("結果是:"+sum, null);
                 results.setDataType(SampleResult.TEXT);
             }//會顯示在結果樹的響應數據裏  
             System.out.println(sum);//會輸出在Jmeter啟動的命令窗口中
             results.setSuccessful(true);
         }catch(Throwable e){
             results.setSuccessful(false);
             e.printStackTrace();
         }finally{            
             results.sampleEnd();     //定義一個事務,表示這是事務的結束點     
         }
       return results;
    }
    
    //結束方法,實際運行時每個線程僅執行一次,在測試方法運行結束後執行
    public void teardownTest(JavaSamplerContext arg0) {
    }    
}  
使用eclipse的maven install打成jar包,並將其放入apache-jmeter-4.0\lib\ext路徑下,然後在GUI模式中的Java請求界面中就能看到相應的類啦。通過此方法(jmeter運行Java腳本)的學習,在以後則可以直接測試開發寫好的方法。

4.jmeter註意事項

1>程序中依賴的jmeter的jar包和Linux主機上安裝的版本要一致(Windows環境中自己寫的java的jar包中依賴的jmeter版本和所安裝版本不一致時並未報錯);

jmeter知識總結(一)