利用JMeter進行Web測試
JMeter介紹
腳本錄製
運行JMeter進行測試
JMeter主要組件介紹
參數化設置
動態數據關聯
使用命令行運行JMeter腳本
利用XSLT分析JMeter結果文件
JMeter介紹
JMeter, 一個100%的純Java桌面應用,它是Apache組織的開放源代碼項目,它是功能和性能測試的工具。JMeter能夠用於測試靜態或者動態資源的性能 (文件、Servlets、Perl腳本、Java對象、數據庫和查詢、ftp服務器或者其餘資源)。原先Jmemer是爲Web/HTTP測試而設計 的,可是它已經擴展以支持各類各樣的測試模塊。它和用於HTTP和SQL數據庫(使用JDBC)的模塊一塊兒運送。它能夠用來測試靜止資料庫或者活動資料庫 中的服務器的運行狀況,能夠用來模擬對服務器或者網絡系統加以重負荷以測試它的抵抗力,或者用來分析不一樣負荷類型下的全部運行狀況。它也提供了一個可替換 的界面用來定製數據顯示,測試同步及測試的建立和執行。
Jmeter的下載地址:http://jakarta.apache.org/jmeter/usermanual/index.html
JMeter 的特性:
a) 可以對HTTP和FTP服務器進行壓力和性能測試, 也能夠對任何數據庫進行一樣的測試(經過JDBC)。
b) 徹底的可移植性和100% 純Java。
c) 徹底 Swing 和輕量組件支持(預編譯的JAR使用 javax.swing.*)包。
d) 徹底多線程 框架容許經過多個線程併發取樣和 經過單獨的線程組對不一樣的功能同時取樣。
e) 精心的GUI設計容許快速操做和更精確的計時。
f) 緩存和離線分析/回放測試結果。
g) 高可擴展性:
h) 可連接的取樣器容許無限制的測試能力。
i) 各類負載統計表和可連接的計時器可供選擇。
j) 數據分析和可視化插件提供了很好的可擴展性以及 以及個性化。
k) 具備提供動態輸入到測試的功能(包括Javascrīpt)。
l) 支持腳本變成的取樣器(在1.9.2及以上版本支持BeanShell)。
腳本錄製html
利用BadBoy進行腳本錄製
利用BadBoy錄製JMeter腳本(1)
經過Badboy的官方網站(http://www.badboy.com.au)下載Badboy的最新版本;
安裝Badboy。安裝過程同通常的Windows 應用程序沒有什麼區別,安裝完成後你能夠在桌面和Windows開始菜單中看到相應的快捷方式——若是找不到,能夠找一下Badboy安裝目錄下的Badboy.exe 文件,直接雙擊啓動Badboy;
啓動Badboy,你能夠看到下面的界面。
利用BadBoy錄製JMeter腳本(2)
在地址欄(圖中紅色方框標註的部分)中輸入你須要錄製的Web應用的URL——這裏咱們以http://www.baidu.com 爲例 。
點擊 開始錄製 按鈕(圖中藍色圓圈標註的部分)開始錄製。
開 始錄製後,你能夠直接在Badboy內嵌的瀏覽器(主界面的右側)中對被測應用進行操做,全部的操做都會被記錄在主界面左側的編輯窗口中(圖中黃色方框標 注的部分)——在這個試驗中,咱們在baidu的搜索引擎中輸入 JMeter 進行搜索。不過錄制下來的腳本並非一行行的代碼,而是一個個Web對象——這有點像LoadRunner的VuGen中的Tree View視圖;
錄製完成後,點擊工具欄中的「中止錄製」按鈕(圖中紫色方框標註的部分),完成腳本的錄製
利用BadBoy錄製JMeter腳本(3)
選擇「File -> Export to JMeter」菜單,填寫文件名「baidu.jmx」,將錄製好腳本導出爲JMeter腳本格式。也能夠選擇「File -> Save」菜單保存爲Badboy腳本;
啓動JMeter並打開剛剛生成的測試腳本,就能夠用JMeter進行測試了java
利用JMeter的代理服務器功能進行腳本錄製
利用JMeter的代理服務器功能
進行腳本錄製(1)
在測試計劃中添加線程組,在線程組中添加邏輯控制器-錄製控制器。
在工做臺中添加非測試元件-HTTP代理服務器。
端口:即代理服務器的監聽端口,咱們設爲8080。
目標控制器選擇:測試計劃>線程組;
分組選擇:每一個組放入一個新的控制器。
在HTTP代理服務器中添加定時器-高斯隨機定時器(用於告知Jmeter來在其生成的HTTP請求中自動的增長一個定時器)。定時器將會使相 應的的取樣器被延遲。 延時的規則是,在上一個訪問請求被響應並延時了指定的時間後,下一個被定時器影響的取樣訪問請求才會被髮送出去。正則表達式
若是在代理服務器元件裏使用了高斯隨機定時器,就應該在其中的固定延遲偏移(Constant Delay Offset)設置項裏添上${T}(用於自動引用紀錄的延遲時間)。
代理服務器配置好之後,點擊啓動,代理服務器就會開始記錄所接受的HTTP 訪問請求。
打開瀏覽器,打開Internet選項,將局域網(LAN)設置中的代理服務器設爲:localhost,端口爲在代理服務器中設的端口:8080。
在瀏覽器地址欄中輸入地址並進行相關的操做進行錄製,錄製完成後, 中止HTTP 代理服務器; 在錄製控制器元件上單擊右鍵將記錄的元件保存爲一個文件用於之後重用,另外,不要忘了恢復瀏覽器的代理服務器設置。
運行Jmeter進行測試(1)數據庫
腳本錄製完畢後,就能夠運行JMeter來進行咱們的測試了。
到JMeter的網站http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi
下載JMeter的最新版本,將zip文件解壓縮到D:/JMeter,運行D:/JMeter/bin下的jmeter.bat便可。
打開JMeter會有一個默認的測試計劃,點擊文件-打開,選中錄製的腳本文件如:WebXSample_addUser.jmx,打開腳本進行測試。
在線程組上添加監聽器-聚合報告(用於分析測試結果)後,點擊運行-啓動,開始測試,測試完畢後在聚合報告中就能夠看到測試結果。一個簡單的測試計劃就完成了。
聚合報告顯示測試結果
Label:每一個 JMeter 的 element (例如 HTTP Request )都有一個 Name 屬性,這裏顯示的就是 Name 屬性的值apache
Average:平均響應時間 — 默認狀況下是單個 Request 的平均響應時間,當使用了事務控制器時,也能夠以事務爲單位顯示平均響應時間
Median:中位數,也就是 50 %用戶的響應時間
90% Line: 90 %用戶的響應時間
Min:最小響應時間
Max:最大響應時間
Error%:錯誤率,本次測試中出現錯誤的請求的數量 / 請求的總數
Throughput:吞吐量 —— 默認狀況下表示每秒完成的請求數( Request per Second )
KB/Sec:每秒從服務器端接收到的數據量
測試計劃(Test Plan)是使用 JMeter 進行測試的起點,它是其它 JMeter 測試元件的容器。
線程組(Thread Group)表明必定數量的併發用戶,它能夠用來模擬併發用戶發送請求。
取樣器(sampler)定義實際的請求內容,被線程組包含,咱們主要用HTTP請求。
監聽器(Listener)
邏輯控制器(Logic Controller)
斷言(Assertions)
配置元件(Config Element)
前置處理器(Pre Processors)和後置處理器(Post Processors)
定時器(Timer)
JMeter主要組件介紹-測試計劃瀏覽器
測試計劃(Test Plan)是使用 JMeter 進行測試的起點,它是其它 JMeter 測試元件的容器。
名稱:你能夠爲你的測試計劃取一個有意義的名字。
註釋:對測試計劃的註釋。
用戶定義的變量:用戶能夠本身定義變量,在用到此變量的時候直接用<script id="MathJax-Element-1" type="math/tex">{變量名}引用便可。例:變量名=url,值=http://www.baidu.com,在須要http://www.baidu.com時直接用</script>{url}便可。
Add directory or jar to classpath:向類路徑即%JMETER-HOME%\lib中添加目錄及jar包。
JMeter主要組件介紹-線程組
名稱:爲線程組起名字。
線程屬性-線程數:設置發送請求的用戶數目 ,即併發數。
線程屬性-Ramp-Up Period(in second):線程間的時間間隔,單位是秒。即全部線程在多少時間內啓動。
線程屬性-循環次數:請求的重複次數,若是選擇後面的forever(默認),那麼 請求將一直繼續,若是不選擇forever,而在輸入框中輸入數字,那麼請求將重複指定的次數,若是輸入1,那麼請求將執行一次,若是是0,會出現問題。
調度器配置-啓動時間:測試計劃何時啓動,啓動延遲會覆蓋它。
調度器配置-結束時間:測試計劃何時結束,持續時間會覆蓋它。
調度器配置-持續時間:測試計劃持續多長時間,會覆蓋結束時間。
調度器配置-啓動延遲:測試計劃延遲多長時間啓動,會覆蓋啓動時間。
JMeter主要組件介紹-取樣器(HTTP請求)
名稱:HTTP請求的名字。
Web服務器-服務器名稱或IP、端口號,腳本錄製時自動添加,也可使用「用戶自定義變量」。
HTTP請求:用默認值便可。
同請求一塊兒發送參數:請求中的參數、值能夠在此設置,須要用到參數化及動態數據關聯,咱們在後面專門介紹。
同請求一塊兒發送文件:我能夠制定同請求一塊兒發送哪一個文件。
其餘任務包括:從HTML文件中獲取全部內含的資源、用做監視器、Embedded URLs must match
監聽器(Listener)負責收集測試結果,同時也被告知告終果顯示的方式。咱們經常使用的包括:聚合報告、查看結果樹、用表格查看結果,都支持將結果數據寫入文件。其餘的添加上去看看就行。聚合報告前面咱們介紹過,後面是查看結果樹和用表格查看結果的截圖。
JMeter主要組件介紹-監聽器(用表格查看結果)
JMeter主要組件介紹-邏輯控制器
邏輯控制器(Logic Controller)能夠自定義JMeter發送請求的行爲邏輯,它與Sampler結合使用能夠模擬複雜的請求序列。
循環控制器能夠設置請求的循環次數或永遠循環(若是選中永遠的話)。
事務控制器能夠將多個請求放在同一個事務中。若是選中Gegerate parent sample,則聚合報告中只顯示事務控制器的數據,而不會顯示其中的各個請求的數據,反之則所有顯示。
JMeter主要組件介紹-斷言
斷言(Assertions)能夠用來判斷請求響應的結果是否如用戶所指望的。它能夠用來隔離問題域,即在確保功能正確的前提下執行壓力測試。這個限制對於有效的測試是很是有用的。
JMeter主要組件介紹-配置元件緩存
配置元件(Config Element)維護Sampler須要的配置信息,並根據實際的須要會修改請求的內容。咱們主要在參數化中用到CSV Data Set Config服務器
JMeter主要組件介紹-前置處理器和後置處理器
前置處理器(Pre Processors)和後置處理器(Post Processors)負責在生成請求以前和以後完成工做。前置處理器經常用來修改請求的設置,後置處理器則經常用來處理響應的數據。咱們主要在動態關聯中用到後置處理器的正則表達式提取器。
JMeter主要組件介紹-定時器markdown
定時器(Timer)負責定義請求之間的延遲間隔。
參數化設置網絡
在咱們的測試計劃中咱們使用的都是HTTP請求,在HTTP請求中經常會提交一些參數,咱們爲了避免想在每一次請求中都使用相同的參數值,就要想辦法讓每一次請求的參數的值都是不同的,咱們就須要進行參數化設置,這裏咱們介紹兩種參數化設置的方法。
一種是利用函數助手中的_Random函數進行參數化設置;
一種是利用配置元件中的CSV Data Set Config進行參數化設置。
參數化設置-函數助手(1)
JMeter中有一個函數助手的功能,裏面內置了多個函數,咱們能夠利用其中的_Random函數來進行請求中的參數化設置。
在JMeter中選擇「選項-函數助手對話框」打開函數助手對話框。
選擇一個功能_Random。
設定最小值爲1。
設定最大值爲100。
函數名稱設爲func1。
點擊生成將生成一個引用字符串Random(1,100,func1,在需要的請求參數中拷貝該字符串即可。其中函數名稱用來在引用中做區別,即我們可以設定不同的名稱在不同的地方引用同一個函數的功能例如:我們生成了兩個串Random(1,100,func1,在須要的請求參數中拷貝該字符串便可。其中函數名稱用來在引用中做區別,即咱們能夠設定不一樣的名稱在不一樣的地方引用同一個函數的功能例如:咱們生成了兩個串{_Random(1,100,func1)}、 Random(1,100,func2),在添加圖書的請求中,我們在bookName的參數值中引用Random(1,100,func2),在添加圖書的請求中,咱們在bookName的參數值中引用{_Random(1,100,func1)},在bookConcern的參數值中應用${_Random(1,100,func2)},見截圖, 這樣測試運行時不一樣的線程將產生不一樣的bookName和bookConcern。
參數化設置-CSV Data Set Config(1)
在線程組上點擊右鍵選擇添加-配置元件-CSV Data Set Config,打開CSV Data Set Config。
Filename文件名:即參數化要引用的文件名。這裏是d:\number.txt
File encoding文件編碼:能夠不填。
Variable Names(comma-delimited)變量名(用逗號分割):多個變量能夠引用同一個文件,用逗號分割。這裏是num1,num2
Delimiter(use ‘\t’ for tab):參數文件中多個變量值的分隔符,\t表示用tab鍵分割,默認是逗號。
Recycle on EOF?:結束後是否循環?默認是True.
Number.txt文件內容見截圖。
參數化設置-CSV Data Set Config(2)
在添加圖書的請求中,咱們在bookName的參數值中引用num1,在bookConcern的參數值中應用num1,在bookConcern的參數值中應用{num2},見截圖,這樣測試運行時不一樣的線程將產生不一樣的bookName和bookConcern。
動態數據關聯
在HTTP請求的參數中常常會遇到一些參數的值是從服務器相應的動態數據,這些數據須要進行關聯才能使得每一次請求都能成功得被服務器接受,在JMeter中採用正則表達式提取器來獲取這些動態的數據。
正則表達式容許用戶從服務器響應中獲取數據,做爲一個後置處理器,正則表達式提取器會在每個請求執行後再執行,正則表達式提取請求的參數值,產生模板字符串,並將結果保存到給出的變量中。
動態數據關聯(1)-正則表達式提取器
在HTTP請求的參數中常常會遇到一些參數的值是從服務器相應的動態數據,這些數據須要進行關聯才能 使得每一次請求都能成功得被服務器接受,在JMeter中採用正則表達式提取器來獲取這些動態的數據。好比咱們想要得到從服務器相應的TOKEN,就能夠 使用下面的正則表達式提取器。
使用時就可使用${token_g1}來表示獲取到的TOKEN值。以下圖:
使用命令行運行JMeter腳本
JMeter -n -t my_test.jmx -l log.jtl
-n告知JMeter採用非圖形化運行JMeter腳本
-t指定要運行的腳本文件
-l指定保存執行結果的文件名
執行命令前要檢查當前目錄是不是%JMeter_Home%\bin 目錄;
若是 JMeter 腳本不在當前目錄,須要指定完整的路徑;若是要把執行的結果保存在其餘地方也要指定完整的路徑。
利用XSLT分析JMeter結果文件(1)
將結果文件的擴展名改成xml,例:將log.jtl改成log.xml。 在log.xml的文件頭