使用 Apache JMeter™工具進行性能測試

                                                                        使用 Apache JMeter™工具進行性能測試

一、性能測試的定義

        性能測試是通過自動化的測試工具模擬多種正常、峯值以及異常負載條件來對系統的各項性能指標進行測試。負載測試和壓力測試都屬於性能測試,兩者可以結合進行。通過負載測試,我們可以瞭解在各種工作負載下系統的性能,當負載逐漸增加時,可以觀測系統各項性能指標的變化情況。壓力測試是通過確定一個系統的瓶頸或者不能接受的性能點,來獲得系統能提供的最大服務級別的測試。

二、性能測試的關注點  --- 系統吞吐量。

        吞吐量是衡量系統性能的一個重要指標,在計算機領域,一個系統的吞度量(承壓能力)與CPU的運算能力、外部接口、IO、處理任務的程序質量等緊密關聯。當一個計算機系統的CPU運算速度更強,外部接口性能更好,IO傳輸速度更快、程序算法的質量更高的時候,相應地,系統處理任務的的速度就會越快,吞吐量自然就會上去,這時候我們就會認爲系統的性能是更好的。
       當我們想選擇一些參數來評估一個系統的性能的時候,我們經常會見到 QPS(TPS)和併發數這兩個詞,QPS(TPS)指的是 每秒鐘系統處理的request/事務 數量。併發數指的是  系統同時處理的request/事務數。那麼這兩個參數是如何衡量系統吞吐量的呢?這裏需要清楚的是,QPS/併發數=響應時間,系統的響應時間越短,說明系統提供服務的能力越好。但是由於軟硬件的限制,每套系統這兩個值都有一個相對極限值,在應用場景訪問壓力下,只要某一項達到系統最高值,系統的吞吐量就上不去了,如果壓力繼續增大,系統的吞吐量反而會下降,因爲系統會超負荷工作,調度程序會更頻繁的進行任務上下文切換、內存等其它消耗會導致系統性能下降。

三、如何提高系統的性能? --- 系統保持有一個合理的性能。

       當我們部署一個Web系統程序的時候,這個系統的性能高低對用戶而言直接的反饋就是響應時間,當響應時間越低,用戶的使用體驗越好。那我們該如何提高系統的性能呢?作爲網站的運維人員和程序開發人員,對系統的性能提升方式有什麼不一樣的關注點呢?
      3.1 運維人員的關注點
         ① 服務器、數據庫、網絡的資源如何配置才能最優
         ② 更換哪些硬件設備纔可以提升性能,軟硬件是否可以擴展
         ③ 系統的性能瓶頸在哪裏,是哪方面因素導致的。
         ④ 系統能否保持7*24小時的業務訪問,最多支持多少用戶訪問,系統最大的業務處理量是多少?
      3.2 開發人員的關注點
         ① 系統架構、數據庫如何設計才能保持結構最優
         ② 代碼如何編寫才能最大化的提高效率。
      從上面不難看出,軟硬件的協同優化才能給系統提供一個更好地性能。當然也並不是系統的資源配置的越高越好,我們也要根據業務量來合理的配置資源,以免造成不必要的浪費。

四、Apache JMeter™ 介紹

        JMeter 是Apache組織開源的一款使用Java語言編寫的壓力和負載測試工具。最初被設計用於Web應用測試但後來擴展到其他測試領域。主要用來測試部署在服務器端的應用程序的性能,還可以可以通過JDBC對數據進行測試、對FTP服務器進行測試等等。

五、JMeter的安裝與配置

        由於JMeter是採用Java開發的,因此係統需要安裝Java的JRE運行環境,如果需要開發JMeter的相關插件,需要安裝JDK開發環境,需要注意的是要配置好相應的環境變量、版本的匹配問題。然後登陸JMeter官網,下載安裝包進行安裝即可。安裝完成後,在bin目錄下雙擊執行jmeter.bat,就可以使用這個程序進行測試了。

JMeter.bat

 

六、 JMeter使用實例

       6.1 流程綜述
       首先需要在Test Plan 下添加 Threads(Users),這個組件是我們進行一次測試計劃的基礎,我們可以設置有多少線程參與了併發請求,多久這些線程可以全部啓動完畢,然後還可以設置這些線程會持續請求多長時間,這有點模擬真實用戶併發請求的意思。然後在這個基礎上可以添加具體的請求,比如HTTP(s)請求啊,FTP請求啊等等,然後要對這些請求設置具體的參數,例如請求的URL、請求方式,請求參數等等。由於有時候打開一個頁面可能會涉及較多的HTTP請求,爲了完整的測試這個頁面的打開性能,需要將這些請求包含在一個事務當中,這樣這些請求就會被一同執行。 再有時候我們需要對某接口進行併發量測試,想讓數個Thread同時請求一個接口,由於之前只是設置了Threads在多長時間內啓動完畢,並不能滿足要求,因此需要引入集合點這個組件,在某一個請求前設置集合點的意思是等待特定數量的線程啓動完成,然後同時併發執行請求。我們設置了線程組,添加了請求,配置了事務和集合點等等這些東西,那接下來肯定想看看請求處理之後的結果啊,有沒有請求成功啊,成功率是多少啊,請求執行了多久時間啊,這時候我們就要添加監聽器組件,看看這些線程執行後的具體情況。有時候WEB頁面的請求設置的很複雜,比如有些請求需要登陸纔可以進行,那這時候我們就得要設置一些Cookie、Header管理器等等。我們還可以對請求攜帶的參數進行參數化管理,將相關的參數存放在某一文件中,然後從這個文件中讀取參數。
       總之,我們要清楚一個事,JMeter的目的是通過線程組模擬多用戶進行併發請求,從而來了解系統提供相關服務的能力大小,在不同的場景下用戶進行請求的情況是千差萬別的,我們要做的就是儘可能的模擬這些真實應用場景下的用戶請求。

      6.2 測試示例
      測試百度搜索的接口,並對搜索參數進行參數化,設置集合點模擬5個用戶併發請求,添加監聽器查看請求結果。

      1)待測試的接口:https://www.baidu.com/s?ie=utf-8&wd=IT之旅CSDN

      2)測試過程解釋

            ①添加線程組,並設置好線程組的基本參數。需要設置的有:線程組名稱,線程數,線程啓動時間,持續時間等等。

       ②添加HTTP請求,配置請求參數。服務器IP,路徑,請求參數等。

      ③添加 監聽器 -> 結果響應數,查看請求的執行情況。

        這時候,一個簡單的HTTPS請求就已經設置完成了,點擊執行按鈕可以看到請求已經成功執行了。 接下來可以更進一步的設置集合點等參數了。

        ④對請求參數進行參數化設置。添加 -> 配置元件 -> 用戶自定義變量

       當然,也可以將請求的參數以scv格式的形式存放於文件中,

       ⑤集合點設置,讓特定數量的線程同時發起請求。如果線程組要測試很多請求,值得注意的是集合點設置的位置,一定要和需要進行併發測試的那個請求綁定在一起,不然是沒有效果的。

       ⑥事務控制器的作用就是讓線程連續執行多個請求,將這多個請求看成一個整體。我們只需要把多個請求一起放在事務控制器下面即可。

七、 總結

        性能測試是通過某種特定的方式對被測試系統按照一定的測試策略進行施壓,獲取該系統的響應時間、運行效率、資源利用情況等各項性能指標,從而來評價系統是否滿足用戶性能需求的過程,它是我們項目上線之前必須要進行的一個測試步驟。

       Apache JMeter™是一款優秀的壓力和負載測試工具,能很好地滿足我們對性能測試工具的要求,因此,掌握好這個工具的使用對測試人員來說是必要的。

 

 

發佈了62 篇原創文章 · 獲贊 171 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章