Apache JMeter教程
要負(fù)載測試您的Web應(yīng)用程序嗎? 然后,您應(yīng)該了解Apache JMeter !
該JMeter教程介紹了基本概念以及如何創(chuàng)建測試計劃以及如何執(zhí)行它以對應(yīng)用程序進(jìn)行基準(zhǔn)測試。
這是我在Disy的Tech-Blog上的文章的交叉張貼 -謝謝您讓我在公司時間寫文章! 同時還要感謝我的同事Boris Terzic和Karsten Schnitter指出了有問題和遺漏的位。 盡管如此,所有錯誤當(dāng)然都是我的。
認(rèn)識JMeter
使用JMeter,您可以創(chuàng)建和執(zhí)行測試計劃 ,這些計劃被組織為樹。
基本要素
計劃執(zhí)行的入口點是線程組 ,其中每個線程代表一個用戶。 控制器是測試的關(guān)鍵。 它們是線程組或其他控制器的子級,有兩個變體,定義發(fā)生了什么以及如何發(fā)生:
- 取樣關(guān)心的是會發(fā)生什么 ,他們發(fā)送請求(HTTP,FTP,JDBC,你有什么),并等待響應(yīng)。 記錄每個單獨的交換(即請求,響應(yīng),響應(yīng)時間等),并將其稱為樣本 。
- 邏輯控制器確定采樣器是如何執(zhí)行的,它們提供像分支和循環(huán)常見的控制結(jié)構(gòu)。
一個非?;镜腏Meter測試計劃
雖然可以運(yùn)行僅包含這些要素的基準(zhǔn),但除最瑣碎的測試計劃外,其他任何要素都需要其他基準(zhǔn)。
進(jìn)階元素
像線程組一樣, 測試片段是測試計劃的子代,并且包含構(gòu)成測試一部分的子樹。 與線程組不同,它們不直接執(zhí)行。 相反,它們包含在模塊控制器中 。 這種結(jié)構(gòu)可以重用。
配置存儲控制器要引用的變量,管理cookie,在測試執(zhí)行期間充當(dāng)緩存等。 預(yù) 處理器和后處理器連接到采樣器,并在采樣器之前或之后執(zhí)行。 他們可以修改樣本將要使用的變量或解析響應(yīng)以存儲一些信息。 您可以使用斷言來驗證正在運(yùn)行的測試的屬性,例如,響應(yīng)的主體不為空。
人類在瀏覽網(wǎng)站時會暫停,您可以使用計時器進(jìn)行模擬。 計劃可以在有或沒有計時器的情況下執(zhí)行。
最后,使用偵聽器收集和可視化樣本。
更高級的JMeter測試計劃
您可以在大多數(shù)節(jié)點的上下文菜單中的添加下找到這些項目。 它們是構(gòu)建測試計劃的基礎(chǔ)。
他們的交互非常直觀,但是我仍然建議您仔細(xì)閱讀作用域規(guī)則 。 如果您使用計時器,一定要這樣做,因為這里存在幾種直觀的解釋,只有一種是正確的。 ;-)
制定測試計劃
我發(fā)現(xiàn)通過記錄與站點的交互來開始創(chuàng)建測試計劃,然后編輯和構(gòu)造記錄的請求非常有用。
記錄
JMeter可以充當(dāng)代理,然后將所有請求記錄為采樣器。 設(shè)置很簡單:
現(xiàn)在,您只需要編輯瀏覽器的代理設(shè)置即可將其指向JMeter,并在記錄器上單擊“開始 ”后,所有請求都將轉(zhuǎn)換為采樣器。
熟悉了自己之后,請嘗試這些功能。
極限記錄
您應(yīng)該通過指定要包括的 URL模式和要排除的URL模式來限制將要記錄的內(nèi)容。 如果定義了至少一個包含模式,則僅記錄與這些正則表達(dá)式匹配的請求。 如果一個請求至少與一個排除模式匹配,則不會記錄該請求。
您可能想要添加建議的排除項并對其進(jìn)行改進(jìn)以僅記錄相關(guān)請求。 (有關(guān)如何使JMeter獲取嵌入式資源的信息,請參見下面的“配置”。)
重用請求
基準(zhǔn)測試的應(yīng)用程序可能不會在固定的URL下運(yùn)行,例如,當(dāng)另一個開發(fā)人員在其計算機(jī)上運(yùn)行它時。 因此,使請求可重用很重要。
為此,記錄儀創(chuàng)建的采樣器不得包含硬編碼的連接詳細(xì)信息。 這可以通過將配置節(jié)點HTTP Request Defaults添加到將包含記錄的采樣器的節(jié)點并輸入與本地配置匹配的值來實現(xiàn)。 然后,JMeter將這些字段留空。
記錄暫停
為了記錄實際的暫停,JMeter可以使用您在與網(wǎng)站進(jìn)行交互時所做的暫停時間自動創(chuàng)建計時器。 將一個計時器添加到記錄器,但不要對延遲進(jìn)行硬編碼,請輸入$ {T}。 該變量將替換為自上次響應(yīng)以來經(jīng)過的掛鐘時間。
(第一個記錄的請求的值可能很長。請務(wù)必檢查一下!)
小組采樣器
將采樣器分組為邏輯組件可幫助您掌握最新信息。 在“ 分組”下,我通常選擇“ 將每個組放入新的事務(wù)控制器中” ; 請參閱下面的組為什么。
根據(jù)測試站點的結(jié)構(gòu),您認(rèn)為屬于一起的請求可能會分為不同的組。 同樣,獨立的請求可能會以相同的結(jié)果結(jié)束。 兩者都可以在編輯時固定。 但是將請求分為不同的組,我發(fā)現(xiàn)快速重新啟動記錄器更為實用。 然后,JMeter會將新請求添加到新組中。
編輯中
以我的經(jīng)驗,手動編輯記錄的采樣器通常是必要的,或者至少是非常有益的。
在編輯測試計劃時,通常會運(yùn)行它。 請注意,所有單個節(jié)點都可以從其上下文菜單或按鈕欄中激活和停用。 添加一些偵聽器以查看JMeter正在測量的內(nèi)容–從查看結(jié)果樹開始,然后在table中查看結(jié)果 。
憑據(jù)變化
如果您的應(yīng)用程序允許用戶登錄,則您可能希望測試計劃執(zhí)行相同的操作。 并使用不同的用戶帳戶。 您可以通過告訴JMeter用用戶名,密碼和其他所需的CSV文件中的數(shù)據(jù)填充登錄請求來實現(xiàn)此目的。
首先,更改記錄的登錄請求,以使用$ {username}和$ {password}之類的變量,而不是硬編碼的值。
然后將CSV數(shù)據(jù)集配置添加到包含登錄請求的節(jié)點。 在配置中,根據(jù)文件結(jié)構(gòu)設(shè)置變量名 ,例如用戶名,密碼。
使用不同的憑證登錄
動態(tài)請求
請求可能必須包含來自先前響應(yīng)的某些信息,并且不能與硬編碼值一起使用。 為了識別這些情況,可能需要重新啟動應(yīng)用程序,使用JMeter執(zhí)行采樣器,并觀察是否所有請求都按預(yù)期得到了答復(fù)。 還要查看應(yīng)用程序的日志,以查看它是否顯示問題跡象。
如何創(chuàng)建動態(tài)響應(yīng)本身就是一個主題,但這可以幫助您入門:
- 后處理器XPath提取器可用于將響應(yīng)的一部分存儲在變量中。
- 使用$ {var_name},變量幾乎可以在任何地方使用。
- 如果需要對值進(jìn)行進(jìn)一步處理才能使其可用,請考慮使用BeanShell PostProcessor ,它將使您能夠在Rhino中執(zhí)行Java或JavaScript代碼。
BeanShell腳本可以訪問幾個參數(shù)。 變量存儲在Map <String,String> vars中,還可以使用名為log的log4j-Logger。 可以通過選項 ?> 日志查看器或右上角的黃色三角形激活日志來檢查輸出。
使用后處理器從響應(yīng)中提取變量
團(tuán)體
我認(rèn)為隔離在不同情況下可以重復(fù)的部分是一種很好的做法。 主要示例是登錄和注銷,應(yīng)將它們放在自己的組中。
這里我不是指線程組,而只是“一堆控制器”。 這可以通過將所有控制器移動到簡單控制器或事務(wù)控制器中來實現(xiàn)。 這些不會更改執(zhí)行,而是通過收集屬于一起的控制器來提供有用的抽象。 給它起一個好名字,這說明一切!
我總是為此使用事務(wù)控制器,以便可以獲取所包含的采樣器執(zhí)行所需的總時間。 為此,您需要激活事務(wù)控制器中的生成父樣本復(fù)選框。
在我確認(rèn)一個小組完全按照我的要求做之后,我通常將其移動到一個正確命名的測試片段中,這樣我就可以輕松地從測試計劃的不同部分使用它,而無需復(fù)制粘貼它。
構(gòu)成
正確的測試計劃的最后一步是組成您記錄,編輯和結(jié)構(gòu)化的不同部分。 如果將各個組封裝在測試片段中,請回想起使用模塊控制器來引用它們。
請記住,線程組中的每個線程代表一個用戶,因此從創(chuàng)建一些線程組開始。 如果您的應(yīng)用程序需要登錄,則這應(yīng)該是要執(zhí)行的第一個實際操作。
然后,您可能想要添加一些邏輯控制器,使您可以排列記錄的片段,以便它們對真實的用戶行為進(jìn)行建模。 可能包括一些隨機(jī)元素,例如隨機(jī)順序控制器 。 如果這樣做,請確保樣本大小足夠大,不會被一些異常值所歪曲。
配置中
閱讀這篇超短篇文章,了解如何使JMeter的行為更像真實的瀏覽器 。
為了讓JMeter自動并行地檢索嵌入式資源,您必須在“ 來自HTML文件的嵌入式資源”下更改每個HTTP請求的設(shè)置。 這將執(zhí)行您在記錄期間排除的所有請求。
似乎沒有必要先排除請求,然后將JMeter配置為自動執(zhí)行它們。 區(qū)別在于,JMeter通過這種方式將使用緩存來避免不必要的請求,并使用池并行而不是連續(xù)地執(zhí)行所需的請求。 這可以模擬瀏覽器的行為方式并帶來更實際的測量結(jié)果。
由wplynn在CC-BY-ND 2.0下發(fā)布
標(biāo)桿管理
只要您正在編輯測試計劃,就可以按照自己喜歡的任何方式執(zhí)行測試。 但是,如果您想真正開始進(jìn)行基準(zhǔn)測試,則需要考慮一些其他細(xì)節(jié)。
閱讀以下兩個最佳實踐列表,以了解該做什么和不該做什么:
- 最佳實踐-JMeter文檔 (至少17.7)
- JMeter最佳實踐– BlazeMeter
此處未提及,但絕對必要的是增加JMeter可用的堆空間。 一種簡單的實現(xiàn)方法是在jmeter.sh的開頭添加JVM_ARGS =”-Xms2g -Xmx2g”(或任何有意義的堆大小)。 確保監(jiān)視日志以發(fā)現(xiàn)OutOfMemoryExceptions。
下一步
官方文檔詳盡無遺。 您可能要檢查的重要入門主題是:
- 測試計劃的要素
- 組件參考
- 幫幫我! 我的老板要我對我們的應(yīng)用程序進(jìn)行負(fù)載測試!
如何編寫和執(zhí)行基準(zhǔn)測試很大程度上取決于您要實現(xiàn)的目標(biāo)。 比較同一應(yīng)用程序的不同變體(例如,以不同的垃圾收集設(shè)置運(yùn)行)與試圖獲取絕對數(shù)(例如,對于SLA)非常不同,并且比其容易得多。
本教程只是為了幫助您入門。 如果業(yè)務(wù)決策將基于基準(zhǔn)結(jié)果,請務(wù)必閱讀本主題。
- Stack Exchange上的資源列表 :軟件質(zhì)量保證和測試
- JMeter負(fù)載測試博客和 BlazeMeter上的 資源
- 貝莫·艾琳(Jacko Erinle)的JMeter Cookbook
- Gil Tene 如何不測量延遲
翻譯自: https://www.javacodegeeks.com/2015/10/apache-jmeter-tutorial.html
總結(jié)
以上是生活随笔為你收集整理的Apache JMeter教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 淘宝商标备案流程(淘宝商标备案)
- 下一篇: morphia_Morphia和Mong