- 翻譯來自 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í)間

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
- Login Request (an HTTP Request)
- 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)
- Once Only Controller
- Thread Group
這個(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ò)誤率中。