轉載:http://www.51testing.com/html/10/n-3725610.html?
?測試計劃中的元素(elements of a test plan)
本節(jié)描述測試計劃不同的部分。
最小測試將包括測試計劃恤煞、線程組和一個或多個采樣器球昨。
1浸间、測試計劃(Test Plan)
測試計劃對象有一個叫 “功能測試” 的復選框有缆,如果選擇了折剃,它將導致JMeter記錄從服務器返回的每個示例的數(shù)據(jù)华临。如果您在測試監(jiān)聽器中選擇了一個文件是鬼,那么這些數(shù)據(jù)將被寫入文件。如果您正在執(zhí)行一個小的運行纲刀,以確保JMeter的配置正確项炼,并且您的服務器正在返回預期的結果,那么這將非常有用示绊。其結果是锭部,文件將快速增長,JMeter的性能將受到影響面褐。如果您正在進行壓力測試(默認情況下是off)拌禾,則該選項應該關閉。
如果您沒有將數(shù)據(jù)記錄到文件中展哭,則該選項沒有任何區(qū)別湃窍。
您還可以使用偵聽器(listener)的 配置 按鈕來決定要保存哪些字段。
2匪傍、線程組(Thread group)
線程組元素是任何測試計劃的起點您市。所有控制器和采樣器必須在線程組下。其他元素役衡,例如偵聽器茵休,可以直接置于測試計劃之下,在這種情況下,它們將適用于所有的線程組榕莺。顧名思義俐芯,線程組元素控制JMeter用來執(zhí)行測試的線程的數(shù)量。線程組的控件允許:
· Set the number of threads: 設置線程數(shù)
·?Set the ramp-up period:設置過渡時期
·?Set the number of times to execute the test:設置執(zhí)行測試的次數(shù)
每個線程將完全獨立地執(zhí)行測試計劃钉鸯,完全獨立于其他測試線程泼各。多個線程用于模擬與服務器應用程序的并發(fā)連接。
這個過渡時期告訴JMeter要花多長時間才能“加速”到選擇的全部線程數(shù)亏拉。如果使用10個線程,并且過渡時期是100秒逆巍,那么JMeter將花費100秒來啟動所有10個線程并運行及塘。在前面的線程開始后,每個線程將開始10(100 / 10)秒锐极。如果有30個線程和一個上升周期120秒笙僚,則每個連續(xù)線程將延遲4秒。
需要足夠長的時間來避免在測試開始時工作負載過大灵再,足夠短的時間肋层,最后的線程在第一個線程完成之前就開始運行(除非有人希望發(fā)生這樣的情況)。 從增加的線程數(shù)開始翎迁,根據(jù)需要調整向上或向下栋猖。
默認情況下,線程組被配置為通過它的元素循環(huán)一次汪榔。
線程組還提供了一個 調度器 蒲拉。單擊線程組面板底部的復選框,以啟用/禁用額外的字段痴腌,在該字段中您可以輸入測試持續(xù)時間雌团、啟動延遲、運行的開始和結束時間士聪。您可以配置 持續(xù)時間(秒) 和 啟動延遲(秒) 來控制每個線程組的持續(xù)時間和啟動后的秒數(shù)锦援。當開始測試時,JMeter會等待 啟動延遲(秒) 之前啟動的線程組的線程和運行配置的持續(xù)時間(秒)的時間剥悟。注意灵寺,這兩個選項覆蓋了 開始時間 和 結束時間 。
或者(盡管不建議不是很靈活)懦胞,您可以使用其他兩個字段 開始時間 和 結束時間替久。當測試開始時,JMeter將在必要時等待躏尉,直到到達開始時間蚯根。在每個循環(huán)的末尾,JMeter檢查是否已經(jīng)到達了結束時間,如果是颅拦,則停止運行蒂誉,否則測試將繼續(xù)運行下去,直到達到迭代限制距帅。
3右锨、控制器(Controllers)
JMeter有兩種控制器:采樣器和邏輯控制器。這些驅動測試的處理碌秸。
采樣器告訴JMeter發(fā)送請求到服務器绍移。例如,如果你想要JMeter發(fā)送http請求添加一個HTTP請求取樣器讥电。您還可以通過向采樣器中添加一個或多個配置元素來定制請求蹂窖。更多信息,參見:采樣器恩敌。
邏輯控制器讓你自定義JMeter決定要發(fā)送請求時用什么樣的邏輯瞬测。例如,您可以在兩個HTTP請求采樣器之間添加交錯邏輯控制器纠炮。有關更多信息月趟,參見:邏輯控制器。
3.1恢口、采樣器(Samplers)
采樣員告訴JMeter向服務器發(fā)送請求并等待響應孝宗。它們按照它們在樹中出現(xiàn)的順序進行處理』∮控制器可用于修改采樣器的重復次數(shù)碳褒。
JMeter采樣器包括:
·?FTP請求
·?HTTP請求(也可以用于SOAP或REST Webservice)
·?JDBC請求
·?Java對象請求
·?JMS請求
·?JUnit測試請求
·?LDAP請求
·?郵件請求
·?操作系統(tǒng)進程請求
·?TCP請求
每個采樣器都有幾個可以設置的屬性。您可以通過在測試計劃中添加一個或多個配置元素來自定義采樣器看疗。
如果要將同一類型的多個請求(例如HTTP請求)發(fā)送到同一服務器沙峻,請考慮使用默認配置元素。每個控制器都有一個或多個Defaults元素(見下文)两芳。
請記住在測試計劃中添加一個偵聽器摔寨,以查看和/或將請求的結果存儲到磁盤。
如果您有興趣讓JMeter對您的請求的響應進行基本驗證怖辆,那么向sampler添加一個 斷言 是复。例如,在壓力測試web應用程序時竖螃,服務器可能返回一個成功的“HTTP響應”代碼淑廊,但是頁面可能有錯誤,或者可能缺少部分特咆。您可以添加斷言來檢查某些HTML標記季惩、常見的錯誤字符串等。JMeter允許使用正則表達式創(chuàng)建這些斷言。
3.2画拾、邏輯控制器(Logic Controllers)
邏輯控制器讓您自定義JMeter決定要發(fā)送請求時的邏輯啥繁。邏輯控制器可以改變來自子元素的請求順序。他們可以自己修改請求青抛,導致JMeter重復請求旗闽,等等。
要了解邏輯控制器對測試計劃的影響蜜另,請考慮以下測試樹:
測試計劃
·?線程組
·?僅一次控制器
登錄請求(一個HTTP請求)
· 加載搜索頁面(HTTP采樣器)
· 交替控制器
搜索“A”(HTTP取樣器)
搜索“B”(HTTP取樣器)
HTTP請求默認值(配置元件)
·?HTTP默認請求(配置元件)
·?Cookie管理器(配置元件)
這個測試的第一件事是适室,登錄請求將僅在第一次執(zhí)行。隨后的迭代將跳過它举瑰。這是由于Once Only Controller(只有一次控制器)的影響亭病。
登錄后,下一個采樣器加載搜索頁面(想象一個用戶登錄的web應用程序嘶居,然后進入搜索頁面進行搜索)。這只是一個簡單的請求促煮,沒有經(jīng)過任何邏輯控制器的過濾邮屁。
加載搜索頁面后,我們要進行搜索菠齿。實際上佑吝,我們想做兩種不同的搜索。但是绳匀,我們希望在每次搜索之間重新加載搜索頁面本身芋忿。我們可以通過4個簡單的HTTP請求元素(加載搜索、搜索“A”疾棵、加載搜索戈钢、搜索“B”)來實現(xiàn)這一點。相反是尔,我們使用Interleave Controller控制器每次通過測試傳遞一個子請求殉了。它保持了排序(即它不會隨機地傳遞一個,而是“記住”它的子元素的位置)拟枚。插入兩個子請求可能會被過度使用薪铜,但是可能會有8個或20個子請求。
注意恩溅,HTTP Request Defaults屬于Interleave Controller隔箍。假設“Search A”和“Search B”共享相同的路徑信息(HTTP請求規(guī)范包括域、端口脚乡、方法蜒滩、協(xié)議、路徑和參數(shù),以及其他可選項)帮掉。這是有意義的——兩者都是搜索請求弦悉,命中相同的后端搜索引擎(比如servlet或cgil - script)。我們可以將這些信息抽象為單個配置元素蟆炊,而不是在路徑字段中使用相同的信息配置兩個HTTP Samplers稽莉。當Interleave控制器“傳遞”來自“Search A”或“Search B”的請求時,它將從HTTP默認請求配置元素的值中填充空白涩搓。因此污秆,我們將這些請求的路徑字段留空,并將這些信息放入配置元素中昧甘。在這種情況下良拼,這充其量只是一個小的好處,但它展示了這個特性充边。
樹中的下一個元素是另一個HTTP默認請求庸推,這個時間添加到線程組本身。線程組有一個內置的邏輯控制器浇冰,因此贬媒,它使用這個配置元素,就像上面描述的那樣肘习。它填入經(jīng)過的任何請求的空格际乘。在web測試中,將所有HTTP Sampler元素中的域字段保留為空是非常有用的漂佩,相反脖含,將這些信息放入HTTP默認請求元素中,添加到線程組中投蝉。通過這樣做养葵,您可以通過改變測試計劃中的一個字段來測試您在不同服務器上的應用程序。否則瘩缆,你必須編輯每一個采樣器港柜。
最后一個元素是HTTP Cookie管理器。所有web測試都應該添加一個Cookie管理器——否則JMeter將忽略Cookie咳榜。通過在線程組級別添加它夏醉,我們確保所有HTTP請求將共享相同的cookie。
邏輯控制器可組合實現(xiàn)各種結果涌韩。請參閱內置邏輯控制器列表( built-in Logic Controllers.)畔柔。
3.2.3、測試片段(Test Fragments)
測試片段元素是一種特殊類型的控制器臣樱,它存在于與線程組元素相同級別的測試計劃樹中靶擦。它與線程組不同腮考,因為它沒有被執(zhí)行,除非由 模塊控制器 或 包含控制器 引用玄捕。
此元素純粹用于測試計劃中的代碼重用踩蔚。
4、偵聽器(Listeners)
當JMeter運行時枚粘,偵聽器提供對測試用例的信息JMeter的訪問馅闽。圖的結果是監(jiān)聽器將響應時間繪制在圖上♀善“視圖結果樹”偵聽器顯示了sampler請求和響應的詳細信息福也,可以顯示響應的基本HTML和XML表示。其他偵聽器提供匯總信息或聚合信息攀圈。
此外暴凑,偵聽器可以將數(shù)據(jù)直接引導到文件中以供以后使用。JMeter中的每個監(jiān)聽器都提供一個字段來指示要存儲數(shù)據(jù)的文件赘来。還有一個配置按鈕现喳,可以用來選擇保存哪些字段,以及是否使用CSV或XML格式犬辰。
注意拿穴,所有偵聽器都保存相同的數(shù)據(jù);唯一的區(qū)別在于數(shù)據(jù)在屏幕上呈現(xiàn)的方式。
可以在測試的任何地方添加監(jiān)聽器忧风,包括直接在測試計劃下。他們只從他們的水平或低于他們水平的元素收集數(shù)據(jù)球凰。
JMeter這里有這些監(jiān)聽器狮腿。
5、定時器(Timers)
默認情況下呕诉,JMeter線程在不暫停的情況下依次執(zhí)行samplers缘厢。我們建議您通過向線程組添加一個可用的計時器來指定延遲。如果您不添加延遲甩挫,JMeter會在很短的時間內發(fā)出太多的請求贴硫,從而使服務器不堪重負。
定時器將導致JMeter在每個采樣器在其范圍內延遲一定的時間伊者。
如果您選擇將多個計時器添加到線程組英遭,JMeter將使用計時器的總和,并在執(zhí)行計時器所應用的samplers之前暫停此時間亦渗。計時器可以添加為samplers或控制器的子元素挖诸,以限制應用程序的采樣器。
為了在測試計劃中提供一個單獨的位置法精,可以使用Test Action采樣器。
6辽装、斷言(Assertions)
斷言允許你斷言你正在測試的服務器返回的結果相味。通過使用斷言拾积,你基本上可以斷定你的程序返回的結果是否是你期望的值。
例如攻走,你可以斷言一個查詢的返回結果將包含一些特定的文本殷勘,特定的文本可以是perl語言的正則表達式,也可以是返回結果中的一部分昔搂,或者整個返回值玲销。
你可以為任何Sampler(取樣器)添加斷言,例如贤斜,您可以向“HTTP請求”中添加一個斷言逛裤,用來檢查文本 “< / HTML >” 瘩绒。然后,JMeter將檢查文本‘< / HTML >’是否存在于HTTP響應中带族。如果JMeter不能找到文本锁荔,那么它將標記為請求失敗。
注意:斷言適用于所有的取樣器择克,但是要將斷言限制到具體的某一個取樣器上恬总,要將斷言作為取樣器的子元素添加。
要查看斷言結果肚邢,請向線程組添加一個“斷言結果”壹堰,斷言失敗的也會現(xiàn)在樹視圖和表偵聽器中,并將統(tǒng)計到匯總骡湖、匯總報告的誤差率里面贱纠。
7、配置元件(Configuration Elements)
一個配置元件與采樣器緊密合作响蕴。雖然它不發(fā)送請求(HTTP(S)測試腳本記錄器 除外)并巍,但它可以添加或修改請求。
一個配置元件只能從放置元素的樹分支中訪問换途,例如懊渡,如果你把一個“HTTP Cookie管理器”放在一個簡單控制器中刽射,只有在簡單控制器內,Cookie管理器才可以訪問HTTP請求控制器(參見圖1)剃执。Cookie管理器可以訪問HTTP請求“頁面1”和“頁面2”誓禁,而不是“頁面3”。
此外肾档,樹分支中的配置元件的優(yōu)先級高于“父”分支中的相同元素摹恰,例如,我們定義二個“HTTP請求默認值”元件:”HTTP請求默認值 1”和”HTTP請求默認值 2”,由于我們將”HTTP請求默認值 2”放在一個循環(huán)控制器中的怒见,故只有”頁面2”可以訪問它俗慈。其他HTTP請求將使用“HTTP請求默認值 2”,因為我們將它放入了線程組(所有其他分支的“父”)遣耍。
圖1 測試計劃顯示了配置元件的可訪問性
注意:配置元件中的”用戶定義的變量”與其它元件是有區(qū)別的闺阱。它是在測試開始時進行處理的,而不管我們將它放在哪里舵变。為了簡單起見酣溃,建議將它放在線程組的開始處。
8纪隙、前置處理器(Pre-Processor Elements)
預處理器在執(zhí)行Sampler(采樣器)請求之前執(zhí)行一些操作赊豌。如果一個預處理器被附加到一個采樣器元件上,那么它就會在這個采樣器元件運行之前執(zhí)行绵咱。預處理程序通常用于在運行前修改采樣品請求的設置碘饼,或者更新不是從響應文本中提取的變量。
9悲伶、后置處理器(Post-Processor Elements)
在采樣器請求完成后艾恼,后處理器執(zhí)行一些操作。如果一個后處理器被附加到一個采樣器元件上拢切,那么它將在Sampler元件運行后執(zhí)行。后處理器通常用于處理響應數(shù)據(jù)秆吵,通常是從它提取值淮椰。