Jmeter使用指南
來自: http://www.cnblogs.com/st-leslie/p/5185376.html
序言
由于公司在來年需要進行壓力測試,所以也就借節假日的機會來學習一下壓力測試的步驟,由于本人的學習時間比較短,希望各位大神朋友們能夠多多的諒解并指正在下的錯誤,在此僅表敬意
適應人群
1、初入門的壓力測試工程師
2、為入門但是打算在軟件測試方面發展的同學
3、對軟件測試有濃厚的興趣的人
壓力測試初窺探
壓力測試顧名思義就是通過模擬指定的用戶數量同時訪問網站從而達到對網站進行施壓,進而測試出網站在高并發問題上的性能優勢劣勢以及應對DDOS攻擊的防護能力,這也是考驗一個網站的健壯性的一個特點(本人認為的),目前主流的壓力測試工具有Jmeter、RoadRunner,其中RoadRunner是有惠普公司開發的一款非開源的商業軟件,在性能測試方面可以說是市面上最牛的測試工具,但是由于其使用需要收費,對于很多自營公司但是資金又不是十分的充裕來說,這樣一筆費用確實比較難讓人接受,所以在此我就推薦大家使用另外一款壓力測試工具Jmeter,其在測試方面雖然相比于RoadRunner來說還是有很多的不足但是由于Jmeter是開源的,而且基本上可以完成公司正常的測試要求,所以Jmeter這一款軟件才是我認為的最佳的壓力測試工具
Jmeter軟件的安裝
Jmeter軟件是純JAVA開發的軟件,所以需要配置JAVA的運行環境才能夠運行,具體的 配置JAVA環境請點擊本鏈接
環境安裝完成后再命令行中運行中直接運行命令java,出現下面的內容即為安裝成功
安裝成功后直接打開bin目錄下面的jmeter.bat文件,初次打開可能會久一點,請耐性等候
Jmeter的幾個常見的概念
1、測試計劃,所有的測試工作都要基于測試計劃來進行,一個測試項目中就只能存在一個的測試計劃,測試計劃在整個項目中充當的是一個全局設置的作用,這樣也就不難解釋為什么一個項目中就只能有一個測試計劃
2、線程組,線程組顧名思義也就是相當于很多線程的一個集合,在項目中可以有多個的線程組,線程組在項目中主要是集合對一個對象進行測試的線程,比如說你想測試A網站和B網站,這個時候你就可以通過創建兩個線程組來完成這個任務
3、HTTP請求,HTTP請求的原理是通過創建HTTP的多條請求,從而達到測試網站性能的作用,HTTP請求也是壓力測試中最為常見的,其他的還有數據庫測試、FTP測試等
好了,在這里就不多說了這些概念了,接下來就來進行一個簡單的應用,其他的概念會在下面提到
Jmeter的簡單應用
Jmeter最為大家所認識的是它在對網站性能上的測試,所以就從這個開始介紹
任務:模擬5個用戶同時訪問,并且訪問的時間要在2秒內結束,目標網站是http://www.cnblogs.com/st-leslie/
分析:模擬5個用戶其實說白了也就是模擬發送五條HTTP請求,這個相信大家都應該知道的吧,不解釋了。
開始步驟:
1、打開Jmeter,并將測試計劃命名為FirstDemo,如下圖所示
2、測試計劃創建完成下一步是創建線程組,線程組中主要有線程數、Ramp-Up Period、循環次數,調度器下面我們就來對這幾個參數簡單的介紹一下
線程數:線程數相當于要虛擬的用戶
Ramp-Up Period:相當于是線程所用的首次循環的時間范圍,后面會進行詳細的解釋
循環次數:用戶循環的次數,循環次數為永遠默認不勾選,這個的主要好處是用來繪制圖標圖標所用,后面進行詳細解釋
調度器:調度器主要是用來設定特定時間運行所用的
根據本次的測試任務要求,線程數我們設置為5,Ramp-Up Perod我們設置為2,循環次數設置為1,如下圖所示
3、線程組創建完成下面就來介紹一下最核心的部分,創建HTTP請求,HTTP請求的創建流程是:線程組=>添加=>Sampler(取樣器)=>HTTP的請求,下面是HTTP請求的主要參數,其他的參數比較簡單就不做介紹,相信你讀者都會懂的
服務器名稱或IP:這里指的是你要訪問的目標主機的域名
注意:在輸入的時候切記不要將"http://"輸入其中這樣jmeter會出錯,直接寫WWW即可,本題也就是輸入 www.cnblogs.com/st-leslie/
端口號:默認的HTTP的端口號是80端口,這個默認的端口號可以不填
協議:指的是數據傳輸協議,一般我們填寫的是HTTP協議
方法:提交信息的方法,一般我們常見的是GET,POST方法
路徑:指的是發生錯誤所要重定向的URL地址或者本地localhost地址
同請求一起發送參數:這個參數相當于GET或者是POST方法提交的一些用戶的自定義信息,這個參數除了可以接受直接設置,也可以使用CSV進行設置
同請求一起發送文件:這個的使用方法跟上面的相似就不介紹了
其他的一些參數比較少用到,一般不設置
將HTTP請求設置為如下圖:
4、好了,基本上已經完成了測試的搭建,現在可以直接的運行,運行的快捷鍵是Ctrl+R,也可以使用下面的按鈕
但是你會發現這樣運行之后你什么現象都沒有看到,這是正常的,因為這樣雖然理論上已經搭建完成但是缺少了一個監視器,所以你是沒有辦法查看結果的,其中監視器的位置是在添加=>監視器下面。常見的監視器有:聚合報告、用表格查看結果、查看結果樹、圖形結果
聚合報告:我們能夠從聚合報告中獲取相關的測試結果,這個也是我們分析結果的主要依據,這個顯示的是同一HTTP請求
用表格查看結果:通過表格的形式將結果呈現,從這里我們可以看到每次HTTP請求發送的情況,相比于聚合報告如果同一個請求發送給多次聚合報告是不會記錄的,但是用表格查看結果是會將其進行記錄
查看結果樹:這個跟表格查看結果有點相似,但是比起根據有詳細的發送請求的信息,以及返回的結果可以查看
圖形結果:這個顧名思義地球人都懂
這里的監視器的用法都是一樣的,我們就以聚合報告為例,為HTTP請求添加聚合報告,其他的監視器的使用方法基本相同
層級關系如下:
好了,這樣便是真正的大功告成了,運行結果如下:
參數說明:
1、Label:HTTP請求的名稱, 這里是采用默認的名稱
2、#Samples:這個是指,采集器的數量,計算公式是:線程數*循環次數
3、這些樣本中HTTP的平均時間
4、樣本的中位數時間,本題中的時間是從大到小排列的第3位,其中Average和Median比較相近,這個也反映了這組請求的時間起伏不大
5、90%Line:指的不是Average*100%*90%,而是假如有10個數,那么我們去的就是百分之90的位置的數,也就是從小到大排列的第9位
5、Throughout:這個也就是我們常說的吞吐量,主要是用來衡量網站性能的關鍵指標,一個網站的吞吐量越高意味著性能越強
6、其他的參數是最小時間、最大時間、出錯率、流量查看
實踐經驗篇
提升篇說白了就是一些本人在練習的時候遇到的一些特殊情況,在此分享給大家
正如上面所說的我們可以把聚合報告放在HTTP請求目錄的下面,但是不知道有沒有人跟我想的是一樣的,就是聚合報告可不可以放在線程組層級的下面,下面我們就來驗證這個說法,如下圖所示:
從上圖我們可以發現,這兩個層級關系都是一樣的(雖然里面的數據不同,但是這些可能會受到網絡流量等其他的一些網絡環境所影響),那聚合報告(監視器)到底與HTTP請求之間的關系是什么呢?這里我們可以先猜測然后進行驗證,我們猜測監視器的作用范圍是監視同級以下的Samples,現在我們就來驗證,如下圖所示
聚合報告的結果是聚合報告1
聚合報告
聚合報告3
由此可以看出,聚合報告1=聚合報告+聚合報告3
下面我們就來談談并發的問題,如上面所示,我們一般人會以為只要把時間設置為 Ramp-Up Period =0的時候就一起發送的,其實并不然,下面我們就來舉例看看 Ramp-Up Period 這個是怎么一回事,先清除所有的測試內容,然后在HTTP請求的下面添加用表格查看結果,如圖所示:
我們可以從紅色的框內發現,2s指的是所有線程一次循環的時間是在兩秒鐘以內,但是0s就不是這樣的效果了,這個有誰知道請留言一下,大家學習學習
好了,怎么實現真正意義上的同時并發呢?這個其實我們可以引入Synchronizing Timer定時器,我們只要在Number of Simulated Users to Group by選項中設置并發數便可以了,但是這個并發數一定要小于線程數要不然就不會發生觸發,下面我們就來看看這個的運行情況
看到了嗎?HTTP請求中的Samples不是一條一條加上去的,而是一下子就5條Samples同時出現
如上面所說的,測試計劃其實就是提供一個全局設置,但是在Jmeter中還有一個可以提供全局設置的地方就是在前置處理器下面的用戶參數, 如下圖所示,我們將80端口號用port變量來代替
然后將HTTP請求改為下圖所示
引用的方法是${變量名},這個方法不僅使用與端口號的設置,其他的設置也是相同的道理
這個設置你也可以在測試計劃中添加效果都是一樣的
對了,可能有些讀者以前是熟悉RoadRunner測試工具的,會認為 RoadRunner測試工具 有比較直觀的圖形化可以進行比較,其實這個在Jmeter中也是有的,你只要在監視器中添加圖形結果即可以看到,但是這個圖形結果一般我們會將循環次數設置為永遠,循環次數太少就沒有什么比較的意義
我們就以循環5次和永遠來進行比較一下
循環5次:
循環永遠
哈哈,是不是直觀了好多呢(笑點低)
上文中我們有寫到CSV的用法,其實CSV的用法有點類似用戶參數的設置,具體請看 這里
結尾
好了,這一章就說到這里了,雖然短短的3天去學習這個工具但是真心感覺這個工具很是強大,比人才疏學淺里面有什么說錯的地方希望大家指正指正,而且對 Constant Throughput Timer定時器 的使用一直不太清楚,有懂的讀者直接在下面留言,最好詳細一點,謝謝大家,春節快樂
</div>