所謂壓力測試是指,通過确定一個系統的瓶頸或者不能接收的性能點,來獲得系統能提供的最大的服務級别的測試。通俗地講,壓力測試是為了發現在什麼條件下您的應用程式的性能會變得不可接受。通常進行壓力測試均是測試人員的工作,但是研發人員或多或少也需要對壓力測試有個基本的了解。這裡我跟大家一起學習如何使用兩個常用工具進行壓力測試,即badboy和Jmeter。
Badboy是用C++開發的,被用于測試和開發複雜的動态應用。它提供了強大的螢幕錄制和回放功能,同時也提供了豐富的圖形結果分析功能。隻要不用于商業目的就可以免費使用。是以這兩工具的結合,就成為了絕配。我們可以用Badboy錄制腳本,然後将錄制的腳本導出為JMeter格式的腳本,最後将該腳本導入到JMeter,借助于JMeter強大的測試功能模拟大量的虛拟使用者,進行複雜的性能測試。

b.點選“開始錄制”按鈕(圖中藍色圓圈标注的部分)開始錄制 。
d.錄制完成後,點選工具欄中的“停止錄制”按鈕(圖中紫色方框标注的部分),完成腳本的錄制。
Apache JMeter,是Apache組織開發的基于Java的針對功能和性能的測試工具。最初JMeter是為Web/HTTP測試而設計的,但是後來它已經擴充到支援各種各樣的測試子產品。JMeter可以用于測試靜态或者動态資源的性能(如靜态檔案、Java服務程式、Servlet、CGI腳本、Perl腳本、Java對象、資料庫和查詢、FTP伺服器或者其他資源)。JMeter可以用于模拟對伺服器、網絡或對象加以巨大的負載,在不同壓力類别下測試它們的強度,分析整體性能。另外,JMeter能夠對應用程式做功能/回歸測試,通過建立帶有斷言的腳本來驗證你的程式傳回了你期望的結果。為了最大限度的靈活性,JMeter允許使用正規表達式建立斷言。同時它也提供了一個可替換的界面用來定制資料顯示,測試的同步及測試的建立和執行。
a.測試計劃(Test Plan)
是使用JMeter進行測試的起點,它是其它JMeter測試元件的容器。
b.線程組(Thread Group)
代表一定數量的并發使用者,它可以用來模拟并發使用者發送請求。
c.取樣器(sampler)
定義實際的請求内容,被線程組包含,我們主要用HTTP請求。
d.監聽器(Listener)
負責收集測試結果,同時也被告知了結果顯示的方式。我們常用的包括:聚合報告、察看結果樹、用表格檢視結果,都支援将結果資料寫入檔案。其他的添加上去看看就行。
e.邏輯控制器(Logic Controller)
可以自定義JMeter發送請求的行為邏輯,它與Sampler結合使用可以模拟複雜的請求序列。
其分為循環控制器和事務控制器。
f.斷言(Assertions)
可以用來判斷請求響應的結果是否如使用者所期望的。它可以用來隔離問題域,即在確定功能正确的前提下執行壓力測試。這個限制對于有效的測試是非常有用的。
g.配置元件(Config Element)
維護Sampler需要的配置資訊,并根據實際的需要會修改請求的内容。我們主要在參數化中用到CSV Data Set Config。
h.前置處理器(Pre Processors)和後置處理器(Post Processors)
負責在生成請求之前和之後完成工作。前置處理器常常用來修改請求的設定,後置處理器則常常用來處理響應的資料。我們主要在動态關聯中用到後置處理器的正規表達式提取器。
i.定時器(Timer)
負責定義請求之間的延遲間隔。
在前面我們使用badboy進行了腳本錄制,這裡可以直接将其導入到Jmeter中。具體補步驟如下:
a.打開JMeter會有一個預設的測試計劃,點選檔案-打開,選中錄制的腳本檔案如:WebXSample_addUser.jmx,打開腳本進行測試。
b.線上程組上添加監聽器-聚合報告(用于分析測試結果)後,點選運作-啟動,開始測試,測試完畢後在聚合報告中就可以看到測試結果。一個簡單的測試計劃就完成了。
a.在測試計劃中先添加一個線程組,然後在該線程組中加入http請求子產品。可以在sampler中看到,Jmeter還能測試資料庫連接配接查詢壓力,FTP連接配接壓力等。
b.編寫測試請求。
c.添加監聽等。
d.設定線程并發量。
f.點選運作,檢視運作結果,進行分析。
即300個并發量中,平均時間是17074毫秒,中間段發出的的請求耗時18891毫秒,末尾百分之90處發出的請求耗時25575毫秒。整個測試過程中,最小耗時為2616毫秒,最大耗時為26911毫秒。
如果您覺得本文确實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^