Jmeter壓力測試:菜鳥的性能測試成長之路

2020-12-14 51Testing軟體測試網

做軟體測試,專項測試是必不可少的一部分任務,此前文章只能跟推送過Apache Bench,接下來我會利用Apache Jmeter來進行壓力測試。

那麼接下來我要對我們的測試伺服器進行壓力測試,包括登錄前的頁面和登錄後的頁面,主要目的是測試負載均衡的實現效果。在網上也參考了不少資料,我把能踩的坑都踩了一遍,也算是能從坑裡爬出來了,至少是能實現了當初的目標。

安裝Jmeter

我用的版本是3.0版本,在這裡建議大家和我一樣,不要輕易使用最新版本,次新版本就可以了,因為最新版本有可能和其他插件和環境還不能很好兼容。至於怎麼安裝就不闡述了,網上有大把的教程。要注意的是,由於Jmeter是用Java語言編寫的,所以同時也要把java環境部署好。安裝好了之後,Jmeter的bin目錄下有個Jmeter.bat文件,雙擊就能運行了。

首次打開Jmeter頁面

未登錄測試

運行軟體之後,我們右擊「測試計劃」——「添加」——「Threads(Users)——線程組」,這樣就建好了一個線程組了,作用當然是用來跑線程。

有了線程組之後,我們再右擊線程組,「添加」——「配置元件」——「http請求默認值」,在這裡面可以設置一些常用的默認的設置,這裡我輸入我們的測試伺服器的IP或域名,這裡我輸入「10.1.xx.xx」,埠號則輸入「6502」,(因為我要測試的地址是:10.1.xx.xx:6502)協議是「http」,如果要測試的網址是https開頭那就填「https」,其他則默認,這時候點擊左上角保存會彈出一個保存框,這是讓你保存你現在所做的測試配置,以後需要再測試的話的直接打開保存的jmx文件就行了。

保存完了之後,我們再右擊「線程組」——「添加」——「Sampler」——「http請求」。這裡和剛才的「http請求默認值」不是一樣的嗎?剛剛那個只是默認值,只是用來設置一些默認配置。真正發起請求的是「http請求」,在http請求裡面我們在「路徑」裡面輸入斜槓「/」就ok了,表示默認路徑,IP那一欄就不用輸入了。這是因為在http請求默認值裡面已經輸過IP位址,以後可以新建多個http請求,只要修改路徑就行了,這樣就可以訪問同一個網站的不同頁面,這就是「http請求默認值」的意義所在,把一些共用的設置寫一遍就好了。

接著,我們再右擊「線程組」——「添加」——「監聽器」——「察看結果數」,在這裡可以查看到http請求和結果。每次新建組件和修改配置信息都要點擊保存,頁面配置圖如下所示:

http請求默認值

http請求

接下來點擊工具欄的綠色運行按鈕,就可以在「察看結果樹」中看到結果了。

察看結果樹的結果

我們新建的「http請求」返回結果200,表明請求成功,從綠色打鉤也能看出,上圖中的下拉列表框可以選擇顯示格式,我們選擇HTML,切換到「響應數據」就可以看到返回的頁面。

設置線程並發數

接下來點擊「線程組」可以看到線程組的設置頁面,默認設置是1個線程,1秒啟動,循環1次。線程數表示啟動多少個線程,Ramp-Up Period表示花多長時間啟動所有線程,循環次數表示每個線程的執行次數。例如,我設置線程數為3,Ramp-Up Period為6,循環次數3,表示軟體將在6秒內啟動3個線程,也就是2秒啟動1個線程,每個線程執行3次請求。

線程並發設置

此外還可以勾選「調度器」,比如我填入持續時間50,啟動延遲0,將循環次數勾選「永遠」,表示線程立即啟動,執行50秒後停止。要注意,如果設置了持續時間和啟動延遲,那麼下面的啟動時間和結束時間就不起作用了,就不用管了,點擊運行即可。

設置其他監聽器

之前僅僅設置了「察看結果樹」這個監聽器,這時候可以右擊「線程組」——「添加」——「監聽器」,裡面有很多監聽器可供選擇,比如圖形結果,用表格查看結果,聚合報告等等,這些都是反映測試過程的指標數據。圖形結果以圖形的形式顯示吞吐量、偏移、平均值等信息,表格結果顯示每一次請求的時間,返回,發送字節數,連接時間等等,聚合報告裡面顯示總體請求的吞吐量,錯誤率等等。下圖為表格結果的樣式。

用表格察看結果

可以看出,圖中顯示了9個Http請求,分別由3個線程執行,每個線程執行3次,正好符合我們對於線程組的設置。圖中每一列的含義分別表示請求序號,開始時間,線程序號,請求名,請求所花的時間,請求狀態,請求字節數,發送字節數,等待時長,連接時間。

聚合報告如下圖所示,每一列的含義分別表示請求名稱,請求總數,請求的平均響應時間(毫秒),50%的請求的響應時間,90%的請求的響應時間,95%的請求的響應時間,99%的請求的響應時間,最小的響應時間,最大的響應時間,錯誤的請求率(錯誤請求數/總的請求數),吞吐量(每秒處理的請求數),接收的字節速率,發送的字節速率。

聚合報告

登錄測試

前面我測試的頁面是不需要登錄的,現在來測試一下登錄的操作。關於登錄需要的參數,一般來說就是用戶名和密碼,但是往往還需要其他參數,我們可以通過抓包工具Fiddler進行抓包,我們在網站中進行一次正常登錄,可以在Fiddler中看到登錄需要的post參數。例如我這裡的Fiddler中顯示我的測試頁面登錄操作post參數有txtUserName, txtUsePws, 那麼需要在「http請求」或「http請求默認值」裡面填入,下圖所示。

點擊「添加」按鈕就可以添加參數了,保存好後,我們點擊運行,就可以在察看結果樹中看到登錄成功後的頁面了,具體的操作和前面一樣的。

會話保持

進入登錄後的頁面後,還想訪問例如「個人信息」,「個人設置」等模塊,這些網頁需要登錄成功後才能訪問到,這裡就需要進行會話的保持,我們右擊「線程組」——「添加」——「配置元件」——「http cookie管理器」,要添加的內容我們可以在察看結果樹的「請求」選項卡裡面看到,裡面可以看到登錄需要的cookie,如果沒有找到cookie或cookie為空,就不用填,無須再手動配置。如圖所示。

Cookie管理器

此時,我們在http請求裡面輸入登錄後的頁面網址就可以請求成功了。

利用文件讀取訪問多個網頁

我在「http請求」的路徑裡面填入的是我要訪問的網頁,每次只能填一個。假如我想訪問好幾個網頁,例如首頁,通知頁,介紹頁等等,除了新建http請求外,我們還可以將這些網頁的地址存儲在TXT文件裡。例如在我的測試伺服器上,想要訪問Preloan/xxx, LoanManage/xxx, AfterLoan/xxx等頁面,如下:

TXT存放多個地址

網址填入後,我們在Jmeter裡面的「選項」——「函數助手對話框」——「StringFromFile」,將TXT的完整路徑貼到圖中位置,點擊生成,可以在框裡生成TXT文件的讀取路徑。

函數助手

我們將$開頭的那串路徑貼到「http請求」的路徑裡面,就可以訪問到TXT裡面的所有網頁了,如圖所示。

伺服器狀態實時監聽

上面介紹了幾個Jmeter自帶的監聽器,但是我發現,裡面顯示的指標好像都不是我特別需要的。

目前我更關心我的請求執行過程中伺服器狀態的改變,例如CPU,內存,磁碟,網絡,TPS,響應時間圖等等,因為這才是壓力測試的目的所在,伺服器狀態隨著請求增加的變化曲線才是我們更加需要看到的。

想看到伺服器變化的曲線圖,需要下載JMeterPlugins-Extras.jar和JMeterPlugins-Standard.jar,將這兩個jar包放入Jmeter的安裝路徑下的lib/ext/下面,重啟Jmeter後,右擊「線程組」——「添加」——「監聽器」,這時候可以看到多了好多監聽器,大多數以「jp@gc」開頭的監聽器。

這裡選擇「PerfMon Metrics Collector」,裡面將會顯示伺服器的狀態信息,現在還看不到,因為要測試的伺服器需要安裝一個包,叫ServerAgent.zip,譬如我的伺服器是Windows的,我將ServerAgent在伺服器中解壓,運行裡面的StartAgent批處理文件就可以了。到這裡也要注意一點,因為這個文件是屬於Jmeter的插件,所以測試伺服器也要裝上Java的jdk文件才可以運行起來。啟動起來後如下所示:

伺服器端的服務啟動

ServerAgent的默認埠是4444,按下圖填入伺服器的地址和埠號,以及需要監控的硬體,如CPU,內存,磁碟,網絡等等。

PerfMon Metrics Collector

OK,接下來點擊運行,可以在chart下看到伺服器的狀態變化曲線如下:

Chart

其實監聽器裡面還有很多其他的曲線,比如TPS曲線,響應時間曲線等等,都可以自己添加。到這裡,基本已經實現了當初想要的指標和目的了。

題外話:

其實我發現如果是單臺伺服器測試的話,用我們測試伺服器自帶的性能監視器會更好用,數據也更全面一些。不過不同公司的測試環境不一樣,按自己的需求來走就好。

性能監視器

相關焦點

  • Jmeter生成壓力測試報告
    Jmeter生成壓力測試報告根據各大招聘網站上的需求來看,熟悉Jmeter做性能測試已經幾乎成為必要條件了。那麼今天在這個給大家安利一波。怎麼使用Jmeter生成壓力測試報告呢?2、輸入jmeter -n -t D:\Jmeter\apache-jmeter-3.2\bin\test.jmx -l result.jtl -e -o D:\Jmeter\apache-jmeter-3.2\bin\WebReportPS:紅框部分的jmx路徑地址以及生成的html測試報告路徑地址必須要正確
  • Jmeter性能測試 入門
  • jmeter單機最大負載_手把手教你用jmeter做壓力測試(詳圖)
    這裡有愛,有分享,有工程師們的成長日記,點藍字「軟體測試面試匯總
  • Jmeter性能及自動化全集
    這篇博客,介紹下如何利用jmeter來測試dubbo接口,並進行性能測試。。。關於jmeter的介紹和元件作用,之前的博客介紹過,很多其他同行的博客也夠詳細的,這裡不做介紹,對jmeter不甚了解的可以參考之前 閱讀全文jmeter(二十二)內存溢出原因及解決方法摘要:jmeter是一個java開發的開源性能測試工具,在性能測試中可支持模擬並發壓測,但有時候當模擬並發請求較大或者腳本運行時間較長時,壓力機會出現卡頓甚至報異常————內存溢出, 這裡就介紹下如何解決內存溢出及相關的知識點
  • 基於JMeter對J2EE應用程式進行性能測試
    【IT168 技術文章】  JMeter是apache的jakarta上面的項目,用於軟體的壓力測試(Load Test),不但可以對HTTP,也可以對資料庫(通過JDBC)、FTP、Web Service、Java 對象等等進行壓力測試。最近,在我們的項目中使用到了它。
  • JMeter性能測試步驟是什麼?如何做軟體的性能測試?
    jmeter性能測試的步驟前提條件:規劃好性能測試所需要的標準,例如想要計算出來20個並發的前提下,在100QPS(每秒的請求數量)的壓力下,伺服器反饋響應時間的長短,然後形成報表來統計服務應用性能同時也可以針對每個接口的上下文建立起關聯,我們這裡以單接口的測試流程為例。請求參數分為parameters:代表著類似url後面直接拼接參數。bodys Data通常用來Form提交參數或者Json數據參數。Files Upload:代表著上傳文件。對應參數添加之後,接口基本信息完成。
  • 性能測試教程[7] jmeter接口自動化回歸測試
    3.用戶名沒填4.帳戶錯誤5.密碼錯誤可以使用jmeter發起接口測試,並將測試結果寫入到excel。定期執行測試腳本,檢查執行結果。第三步準備測試數據和測試案例命令格式空格與分號命令的組合符&&和||type命令快捷鍵   ps :Bash shell教程合集獲取請點擊原文連結Loadrunner安裝nmon安裝nmon analyserWindows性能監視器指標詳解
  • Jmeter-測試計劃
    測試計劃的作用測試計劃的功能面板
  • 純Java 的壓力測試工具 Apache JMeter 發布 4.0 正式版
    老牌壓力測試工具 Apache JMeter 發布了重大更新 —— 4.0 正式版。
  • JMeter安裝與接口測試入門
    這裡有愛,有分享,有工程師們的成長日記,點藍字「軟體測試面試匯總
  • 接口&性能測試工具-JMeter環境部署
    , 按回車鍵顯示結果類似下圖所示, 即為 JDK 環境可用說明: JMeter 工具本身是免安裝的, 故此直接解壓下載好的文件即可解壓下載好的 apache-jmeter"環境變量" -> "系統變量" -> "新建"如下圖所示進行配置, 配置完成後, 點擊"確定"保存配置變量名: JMETER_HOME變量值: D:\apache-jmeter
  • 接口測試詳解JMeter學習(廣州中軟卓越)
    Apache JMeter是Apache組織開發的基於Java的壓力測試工具。用於對軟體做壓力測試,它最初被設計用於Web應用測試,但後來擴展到其他測試領域。 它可以用於測試靜態和動態資源,例如靜態文件、Java 小服務程序、CGI 腳本、Java 對象、資料庫、FTP 伺服器, 等等。
  • 初學者如何編寫Jmeter測試腳本?
    Jmeter的Sampler用來模擬向被測試系統發起請求的,Jmeter會記錄取樣的結果,也就是TPS、響應時間等性能指標。接下來就是使用Java請求進行一個接口測試。大致流程1、導入jar包:導入Jmeter相關jar包2、編寫腳本:使用Eclipse或者IntelliJ IDEA,進行Java測試腳本的編寫3、導出為jar包:使用Eclipse或者IntelliJ IDEA將測試腳本編譯打包為jar包導出4、配置Jmeter:使用自編譯的jar包,以及一些相關配置進行性能測試5
  • Jmeter(三十七) - 從入門到精通進階篇 - 輸出HTML格式的性能測試報告(詳解教程)
    前面已經介紹, 如果要做性能測試,需要在GUI上設計好你的Test Plan,設置各種場景和負載值,包括多少個線程,多少個用戶,循環多少次。設置好了保存,然後用命令行去啟動性能測試,查看相關測試結果。2.Jmeter生成HTML格式報告的架構儀錶板生成引擎是基於示例操作流程的模塊化功能。
  • 性能測試之Jmeter中如何設置參數化數據
    jmeter中進行參數化設置,右擊測試計劃或者線程組,add->config element->CSV Data Set ConfigAllow quoted data在明白組合邏輯關係後,可以更高效的設置參數、更準確地達到進行性能測試的目的。一般情況下進行參數化數據設置的時候,要先進性業務場景分析,所列出需要參數化的數據以及對應的關係,將參數化數據從資料庫中提取出來或根據相應的生成規則進行數據生成,合理的將數據保存到不同的文件中,然後在壓力測試工具中設置參數組合關係,以便可以實現模擬真實性能測試場景。
  • 手把手教你如何使用jmeter做性能測試
    畢竟我不是專業搞培訓,雖然工作多年,也不敢妄稱為人師,怕誤人子弟呀,也只能勉強算工作稍微久一些吧。那麼性能測試分為哪些呢,簡單來說分為以下幾類:1、壓力測試目的:找出臨界點。2、負載測試目的:找出能承受的最大負載量。3、穩定性測試目的:驗證系統是否有內存洩露等問題。
  • Jmeter進行http接口測試,這一篇就搞定
    jmeter進行http接口測試的主要步驟(1.添加線程組    2.添加http請求     3.在http請求中寫入接口的URL,路徑,請求方式,參數     4.添加查看結果樹     5.調用接口,查看返回值)進行webservice測試的一般步驟
  • JMeter壓力測試集合點教程
    JMeter壓力測試集合點教程基本公式 線程數=QPS*time註:QPS--每秒完成請求的個數;time--每個請求響應完成平均需要時間故QPS*time就是所有請求完成響應所需要的總時間,如果需要在一秒完成所有請求的響應,所以線程數需要等於總時間值 壓力測試線程數確定 比如一個活動,大概一個小時內有
  • 壓力測試就是一種破壞性的性能測試
    強度測試,是在強度情況下的性能測試。對於剛才那個例子,如果改為:在一陣強風的情況下,你在負重或沒有負重的情況下,跑100米需要花多少時間?  性能測試是動力,負載測試載重,壓力測試強度  壓力測試stresstest是在一定的負荷條件下,長時間連續運行系統給系統性能造成的影響。
  • 光榮之路測試開發培訓班 | 半年期
    >課程(三)接口自動化測試接口基礎接口的概念、接口定義熟悉接口需求文檔、分析接口需求編寫接口測試用例使用jmeter測試工具進行接口測試requests模塊的安裝,使用requests模塊發送get、post請求;封裝http請求類接口自動化測試框架