JMeter-Test Plan詳解

  • 翻譯來自 Elements of a Test Plan
  • 名詞解釋
    Test Plan:測試計(jì)劃
    Thread Group:線程組
    Controller:控制器
    Sampler:采樣器
    Logical Controllers:邏輯控制器
    Listener:監(jiān)聽器
    The ramp-up period:過渡時(shí)間
    scheduler:調(diào)度器

3. 測試計(jì)劃中的重要組件


這一部分將介紹測試計(jì)劃中的各個(gè)部分,一個(gè)最基本的測試計(jì)劃中包括一個(gè)線程組,一個(gè)或多個(gè)采樣器。

3.0 測試計(jì)劃


測試計(jì)劃里有一個(gè)叫做Functional Testing的復(fù)選框,勾選的話,JMeter將會(huì)記錄每個(gè)樣本從服務(wù)器返回的數(shù)據(jù),并通過配置監(jiān)聽器寫入指定文件中。如果是做壓力測試,文件數(shù)據(jù)量過大會(huì)影響JMeter的性能, 因此這個(gè)按鈕默認(rèn)是關(guān)閉的。

如果沒有選擇寫入的文件,這個(gè)按鈕就是無效的;同時(shí)我們可以通過監(jiān)聽器上的* Configuration*按鈕來保留指定字段。

3.1 線程組


線程組是測試的起點(diǎn),所有的控制器、采樣器必須包含在線程組中,但有些元素?zé)o需包含在線程組中,比如監(jiān)聽器,可以直接放在測試計(jì)劃里,適用于整個(gè)線程組。線程組允許我們自行定義測試?yán)锏模?/p>

  • 線程數(shù)量
  • 過渡時(shí)間
  • 執(zhí)行測試的次數(shù)

線程組中的每個(gè)線程將獨(dú)立執(zhí)行完整的測試計(jì)劃,多個(gè)線程用于模擬并發(fā)測試。
過渡時(shí)間是指JMeter花費(fèi)多長時(shí)間啟動(dòng)所有的線程,比如共有10個(gè)線程,過渡時(shí)間為100秒,則每個(gè)線程啟動(dòng)后10下一個(gè)線程再啟動(dòng)。

過渡時(shí)間需要足夠長以防測試剛開始工作負(fù)荷過大,有的時(shí)間也需要過渡時(shí)間短一點(diǎn),保證第一批線程測試任務(wù)完成前最后一個(gè)線程啟動(dòng)完成。

開始的過渡時(shí)間等于線程數(shù)量,之后根據(jù)需要調(diào)整上下調(diào)整。

默認(rèn)情況下線程組配置成循環(huán)執(zhí)行(loop)所有組件一次。

線程組中包括一個(gè)調(diào)度器。點(diǎn)擊線程組面板底部的復(fù)選框按鈕可以禁用或啟用額外的字段,包括測試時(shí)間、啟動(dòng)延遲、測試開始時(shí)間和結(jié)束時(shí)間


調(diào)度器

3.2 控制器


JMeter有兩個(gè)類型的控制器,采樣器和邏輯控制器。采樣器告訴JMeter發(fā)送請求到服務(wù)器。例如,如果JMeter發(fā)送一個(gè)HTTP請求,則可以添加一個(gè)HTTP請求取樣器。此外,還可以定制一個(gè)請求通過添加一個(gè)或多個(gè)取樣器。有關(guān)更多信息,請參見 Samplers。邏輯控制器可以自定義邏輯來決定何時(shí)發(fā)送請求。例如,我們可以添加一個(gè)交錯(cuò)邏輯控制器交替采樣兩個(gè)HTTP請求。有關(guān)更多信息,請參見Logical Controllers。

3.2.1 采樣器


采樣器告訴JMeter向服務(wù)器發(fā)送請求并等待響應(yīng)。取樣器按照設(shè)置的順序包含在元素Hash Tree中??刂破骺梢杂脕硇薷牡娜悠髦貜?fù)的數(shù)量。
JMeter取樣器包括:

  • FTP請求
  • HTTP請求
  • JDBC請求
  • Java請求
  • JMS請求
  • JUnit測試請求
  • LDAP請求
  • 郵件請求
  • 操作系統(tǒng)進(jìn)程請求
  • TCP請求

每個(gè)采樣器有幾個(gè)屬性可以設(shè)置,并且可以通過添加一個(gè)或多個(gè)配置元素到測試計(jì)劃進(jìn)一步定制一個(gè)取樣器。

如果要發(fā)送多個(gè)相同類型的請求(例如HTTP請求)到同一臺(tái)服務(wù)器上,可以考慮使用一個(gè)默認(rèn)的配置元素。每個(gè)控制器都有一個(gè)或多個(gè)默認(rèn)元素(見下文)。

可以將一個(gè)監(jiān)聽器添加到測試計(jì)劃中來查看請求或者將結(jié)果存儲(chǔ)到磁盤上。

如果想驗(yàn)證請求的響應(yīng),可以添加一個(gè)斷言采樣器。例如,在壓力測試一個(gè)web應(yīng)用程序,服務(wù)器會(huì)返回一個(gè)成功的HTTP響應(yīng)代碼,但是頁面可能有錯(cuò)誤或缺失的部分,那么可以添加斷言檢查特定的HTML標(biāo)記,常見的錯(cuò)誤字符串等等。JMeter允許我們通過正則表達(dá)式創(chuàng)建斷言規(guī)則。
JMeter's built-in samplers

3.2.2 邏輯采樣器


邏輯控制器允許我們自定義邏輯來決定何時(shí)發(fā)送請求。邏輯控制器可以改變子元素發(fā)送請求的順序,也可以修改請求,使JMeter重復(fù)請求等等。

通過一個(gè)測試的HashTree更好地理解邏輯控制器在測試計(jì)劃中的影響:

  • Test Plan
    • Thread Group
      • Once Only Controller
      • Load Search Page (HTTP Sampler)
      • Interleave Controller
        • Search "A" (HTTP Sampler)
        • Search "B" (HTTP Sampler)
        • HTTP default request (Configuration Element)
      • HTTP default request (Configuration Element)
      • Cookie Manager (Configuration Element)

這個(gè)測試中的登錄請求將只執(zhí)行一次,后續(xù)的迭代將跳過它,這是由 Once Only Controller控制的。   
  
登錄之后,下一個(gè)采樣器加載搜索頁面(想象一個(gè)web應(yīng)用程序,用戶登錄時(shí),然后去一個(gè)搜索頁面做一個(gè)搜索)。這只是一個(gè)簡單的請求,并沒有透過任何邏輯控制器。
加載搜索頁面后,我們要做一個(gè)搜索。實(shí)際上,我們想做兩種不同的搜索,并且每次搜索我們想重新加載搜索頁面。我們可以通過4個(gè)簡單的HTTP請求元素(加載搜索,搜索“A”,加載搜索,搜索“B”)完成這個(gè)需求。但是,我們也可以使用交替控制器Interleave Controller每次通過測試傳遞一個(gè)子請求,并且保證了子請求的順序。

注意HTTP Request Defaults屬于交錯(cuò)控制器。由于“搜索A”和“搜索B”共享了許多相同的路徑信息(HTTP請求規(guī)范包含域、端口、方法、協(xié)議、路徑和參數(shù),再加上其他可選項(xiàng)),并且到達(dá)相同的后端搜索引擎,因此我們并不是將兩個(gè)具有相同配置的HTTP取樣器配置在兩個(gè)搜索引擎的路徑字段,而是將共同的路徑字段信息抽樣出來,放到一個(gè)單獨(dú)的配置元素HTTP Request Defaults中。當(dāng)交錯(cuò)控制器從“搜索A”或“搜索B”中傳遞請求時(shí),HTTP Request Defaults將填補(bǔ)空白的路徑信息。所以,上面的測試計(jì)劃里我們讓這些請求的路徑字段為空,并把這些路徑字段放到配置元素中。

接下來一個(gè)元素是另一個(gè)HTTP Request Defaults,并且直接添加到線程組本身。線程組有一個(gè)內(nèi)置的邏輯控制器,因此,這里的HTTP Request Defaults使用方式完全如上所述,填補(bǔ)了請求的空白。在web測試中將所有的HTTP采樣器的DOMAIN字段留空,然后把這些信息放到HTTP Request Defaults,添加到線程組中。這樣做的好處在于在不同的服務(wù)器測試應(yīng)用程序只需改變HTTP Request Defaults的配置,而無需修改每一個(gè)采樣器。

最后一個(gè)元素是[HTTP Cookie Manager]
(https://jmeter.apache.org/usermanual/component_reference.html#HTTP_Cookie_Manager),通常情況下所有的web測試都應(yīng)該添加該元素,否則JMeter將忽略Cookie。通過添加HTTP Cookie Manager在線程組的級(jí)別,確保所有HTTP請求將共享相同的Cookie。  
    
邏輯控制器可以組合實(shí)現(xiàn)不同的結(jié)果,詳細(xì)查看built-in Logic Controllers。

3.2.3 Test Fragments


3.3 監(jiān)聽器


監(jiān)聽器主要用于收集JMeter運(yùn)行時(shí)測試用例的相關(guān)信息。比如圖形結(jié)果監(jiān)聽器(The Graph Results listener)在圖形上繪制響應(yīng)時(shí)間,查看結(jié)果樹偵聽器(The View Results Tree Listener)顯示采樣器請求和響應(yīng)的詳細(xì)信息,并且可以用基本的HTML和XML展示響應(yīng)信息。其他偵聽器提供摘要或聚合信息。
另外,監(jiān)聽器可以將數(shù)據(jù)保存到文件以供以后使用。存儲(chǔ)的文件通過監(jiān)聽器的一個(gè)字段來保存, 此外,監(jiān)聽器中還有一個(gè)配置按鈕,可以用來選擇要保存哪些字段,以及使用csv還是xml格式。

注意,所有監(jiān)聽器保存的數(shù)據(jù)都是相同的,只不過展示數(shù)據(jù)的方式不同。
監(jiān)聽器可以添加到測試計(jì)劃的任何位置,但只能從與它同一級(jí)或低一級(jí)的元素中采集數(shù)據(jù)。

3.4 定時(shí)器


默認(rèn)情況下, JMeter的線程將按順序不停歇的執(zhí)行采樣器,但我們可以在線程組中添加一個(gè)定時(shí)器來設(shè)置延時(shí),因?yàn)槿绻辉O(shè)置定時(shí)器,JMeter有可能在很短時(shí)間內(nèi)發(fā)出很多請求導(dǎo)致服務(wù)器崩潰。
定時(shí)器的作用就是在每個(gè)采樣器執(zhí)行之前延遲一定的時(shí)間。
如果在一個(gè)線程組中添加了多個(gè)定時(shí)器,則JMeter會(huì)統(tǒng)計(jì)這些定時(shí)器的時(shí)間總和,并且在其作用的采樣器之前停留統(tǒng)計(jì)的時(shí)間。當(dāng)然定時(shí)器可以直接添加到采樣器或控制器的子項(xiàng)中。
要在測試計(jì)劃的單個(gè)位置設(shè)置一個(gè)延遲,可以通過采樣器Flow Control Action。

3.5 斷言


斷言允許你斷言關(guān)于從測試服務(wù)器收到的響應(yīng)的行為。使用斷言,可以“測試”應(yīng)用程序是否返回期望的結(jié)果。  
    
例如,我們可以斷言一個(gè)查詢的響應(yīng)是否包含一些特定的文本,這個(gè)文本可以是一個(gè)perl風(fēng)格的正則表達(dá)式。   
  
可以任何采樣器添加斷言。例如,我們可以給一個(gè)HTTP請求采樣器添加一個(gè)斷言,檢查響應(yīng)是否包含文本“< / HTML >”,如果無法找到改文本,表示這個(gè)請求失敗了。

注意,一個(gè)斷言是作為一個(gè)采樣器的子元素,因此其范圍是一整個(gè)采樣器。

添加斷言監(jiān)聽器到線程組中來查看斷言結(jié)果。失敗的斷言也將出現(xiàn)在樹視圖和表監(jiān)聽器中,并將計(jì)入到聚合和總結(jié)報(bào)告的錯(cuò)誤率中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容