這篇文章接上一篇(即 JMeter 第2篇)
文章里的每一句話都是我斟酌過的冀泻,我認(rèn)為需要有注釋或者插圖的地方都會(huì)有相應(yīng)的說明,因?yàn)樗侥芰栴}依然不能保證每一句話的正確性。更多的是作為參考。
3. 測(cè)試計(jì)劃的要素(Elements of a Test Plan)
本節(jié)描述測(cè)試計(jì)劃的不同部分躁劣。
最小測(cè)試將包括測(cè)試計(jì)劃、線程組和一個(gè)或多個(gè)采樣器(Samplers)库菲。
?
3.0 測(cè)試計(jì)劃(Test Plan)
測(cè)試計(jì)劃對(duì)象有一個(gè)名為“函數(shù)測(cè)試模式(Functional Testing)”的復(fù)選框账忘。如果被選中,它將導(dǎo)致JMeter記錄每個(gè)示例從服務(wù)器返回的數(shù)據(jù)蝙昙。如果您在測(cè)試監(jiān)聽器中選擇了一個(gè)文件闪萄,那么該數(shù)據(jù)將被寫到文件中。如果您正在進(jìn)行一個(gè)小的運(yùn)行奇颠,以確保JMeter的配置正確败去,并且您的服務(wù)器正在返回預(yù)期的結(jié)果,那么這將非常有用烈拒。其結(jié)果是文件將迅速增長(zhǎng)圆裕,JMeter的性能將受到影響广鳍。如果你正在做壓力測(cè)試,這個(gè)選項(xiàng)應(yīng)該是關(guān)閉的(默認(rèn)是關(guān)閉的)吓妆。
如果您沒有將數(shù)據(jù)記錄到文件中赊时,這個(gè)選項(xiàng)沒有作用。
您還可以使用監(jiān)聽器(listener)上的Configuration按鈕來決定保存哪些字段行拢。
?
3.1 線程組(Thread Group)
線程組元素是任何測(cè)試計(jì)劃的起點(diǎn)祖秒。所有的控制器和采樣器都必須在一個(gè)線程組之下。其他元素舟奠,例如監(jiān)聽器竭缝,可以直接放在測(cè)試計(jì)劃下,在這種情況下沼瘫,它們將應(yīng)用于所有線程組抬纸。顧名思義,線程組元素控制JMeter用于執(zhí)行測(cè)試的線程數(shù)耿戚。線程組的控件允許您:
- 設(shè)置線程數(shù)
- 設(shè)置過渡時(shí)期(Ramp-Up Period)
- 設(shè)置執(zhí)行測(cè)試的次數(shù)湿故。
每個(gè)線程將完全獨(dú)立于其他測(cè)試線程執(zhí)行測(cè)試計(jì)劃。多個(gè)線程用于模擬與服務(wù)器應(yīng)用程序的并發(fā)連接膜蛔。
過渡期間告訴JMeter要花多長(zhǎng)時(shí)間來“過渡”到所選線程的總數(shù)坛猪。如果使用了10個(gè)線程,并且加速周期是100秒飞几,那么JMeter將花費(fèi)100秒來啟動(dòng)和運(yùn)行所有10個(gè)線程砚哆。在前面的線程開始之后欢际,每個(gè)線程將啟動(dòng)10(100/10)秒蝗罗。如果有30個(gè)線程棺滞,并且加速周期為120秒,那么每個(gè)后續(xù)線程將被延遲4秒卵史。
在測(cè)試開始時(shí),需要足夠長(zhǎng)的時(shí)間來避免過大的工作負(fù)載搜立,并且足夠短以躯,最后的線程在第一個(gè)線程完成之前就開始運(yùn)行(除非一個(gè)線程想要這樣做)。
Ramp-up =線程的數(shù)量做上下調(diào)整啄踊。
默認(rèn)情況下忧设,線程組被配置為在其元素中循環(huán)一次。
線程組還提供一個(gè)調(diào)度器(scheduler)颠通。單擊線程組面板底部的復(fù)選框址晕,以啟用/禁用額外字段,您可以在其中輸入測(cè)試持續(xù)時(shí)間顿锰、啟動(dòng)延遲谨垃、運(yùn)行的開始和結(jié)束時(shí)間启搂。您可以配置持續(xù)時(shí)間(秒)(Duration (seconds))和啟動(dòng)延遲(秒)(Startup Delay (seconds))來控制每個(gè)線程組的持續(xù)時(shí)間以及它開始的秒數(shù)。當(dāng)測(cè)試啟動(dòng)時(shí)刘陶,JMeter將在啟動(dòng)線程組的線程之前等待啟動(dòng)延遲(秒)胳赌,并運(yùn)行配置的持續(xù)時(shí)間(秒)。注意這兩個(gè)選項(xiàng)覆蓋了啟動(dòng)時(shí)間和結(jié)束時(shí)間匙隔。
另外(盡管不推薦疑苫,因?yàn)椴惶`活)您可以使用另外兩個(gè)字段啟動(dòng)時(shí)間和結(jié)束時(shí)間。當(dāng)測(cè)試開始時(shí)纷责,JMeter將在必要時(shí)等待缀匕,直到達(dá)到啟動(dòng)時(shí)間。在每個(gè)周期結(jié)束時(shí)碰逸,JMeter檢查是否達(dá)到了結(jié)束時(shí)間乡小,如果達(dá)到了,則停止運(yùn)行饵史,否則測(cè)試將繼續(xù)進(jìn)行直到循環(huán)結(jié)束满钟。
?
3.2 控制器(Controllers)
JMeter有兩種類型的控制器:采樣器和邏輯控制器。這些驅(qū)動(dòng)了測(cè)試的處理胳喷。
采樣器告訴JMeter向服務(wù)器發(fā)送請(qǐng)求湃番。例如,如果您想要JMeter發(fā)送一個(gè)HTTP請(qǐng)求吭露,請(qǐng)?zhí)砑右粋€(gè)HTTP請(qǐng)求采樣器吠撮。您還可以通過向采樣器添加一個(gè)或多個(gè)配置元素來定制一個(gè)請(qǐng)求。有關(guān)更多信息讲竿,請(qǐng)參見Samplers泥兰。
邏輯控制器允許您定制JMeter用來決定何時(shí)發(fā)送請(qǐng)求的邏輯。例如题禀,您可以添加一個(gè)Interleave邏輯控制器來在兩個(gè)HTTP請(qǐng)求采樣器之間進(jìn)行切換鞋诗。有關(guān)更多信息,請(qǐng)參見邏輯控制器迈嘹。
?
3.2.1 采樣器(Samplers)
采樣器告訴JMeter向服務(wù)器發(fā)送請(qǐng)求并等待響應(yīng)削彬。它們按照出現(xiàn)在樹中的順序進(jìn)行處理⌒阒伲控制器可用于修改一個(gè)采樣器的重復(fù)次數(shù)融痛。
jmeter的樣本器包含:
- FTP Request
- HTTP Request (can be used for SOAP or REST Webservice also)
- JDBC Request
- Java object request
- JMS request
- JUnit Test request
- LDAP Request
- Mail request
- OS Process request
- TCP request
每個(gè)采樣器都有幾個(gè)屬性可以設(shè)置。您可以通過在測(cè)試計(jì)劃中添加一個(gè)或多個(gè)配置元素來進(jìn)一步定制一個(gè)采樣器神僵。
如果要向同一服務(wù)器發(fā)送同一類型的多個(gè)請(qǐng)求(例如雁刷,HTTP請(qǐng)求),請(qǐng)考慮使用缺省配置元素挑豌。每個(gè)控制器都有一個(gè)或多個(gè)默認(rèn)元素(參見下面)安券。
請(qǐng)記住在測(cè)試計(jì)劃中添加監(jiān)聽器墩崩,以便查看測(cè)試結(jié)果。
如果您想讓JMeter對(duì)您的請(qǐng)求的響應(yīng)執(zhí)行基本驗(yàn)證侯勉,請(qǐng)向采樣器添加一個(gè)斷言(Assertion)鹦筹。例如,在壓力測(cè)試web應(yīng)用程序時(shí)址貌,服務(wù)器可能返回一個(gè)成功的“HTTP響應(yīng)”代碼铐拐,但是頁(yè)面可能有錯(cuò)誤,或者可能缺少部分练对。您可以添加斷言來檢查某些HTML標(biāo)記遍蟋、常見錯(cuò)誤字符串等。JMeter允許您使用正則表達(dá)式創(chuàng)建這些斷言螟凭。
內(nèi)置邏輯控制器的列表(JMeter's built-in samplers)
?
3.2.2邏輯控制器(Logic Controllers)
邏輯控制器允許您定制JMeter用來決定何時(shí)發(fā)送請(qǐng)求的邏輯虚青。邏輯控制器可以更改來自其子元素的請(qǐng)求的順序。他們可以自己修改請(qǐng)求螺男,導(dǎo)致JMeter重復(fù)請(qǐng)求棒厘,等等。
要理解邏輯控制器對(duì)測(cè)試計(jì)劃的影響下隧,請(qǐng)考慮以下測(cè)試樹:
- 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)
該測(cè)試樹在 JMeter 的顯示如下:
test tree
關(guān)于這個(gè)測(cè)試的第一件事是登錄請(qǐng)求將只在第一次執(zhí)行奢人。后續(xù)的迭代將跳過它。這是由于僅一次控制器的影響淆院。
登錄后何乎,下一個(gè)取樣器將加載搜索頁(yè)面--Load Search Page(想象一個(gè)用戶登錄的web應(yīng)用程序,然后進(jìn)入搜索頁(yè)面進(jìn)行搜索)土辩。這只是一個(gè)簡(jiǎn)單的請(qǐng)求支救,沒有經(jīng)過任何邏輯控制器的過濾。
注意:Load Search Page在這里就是一個(gè) HTTP 請(qǐng)求脯燃。
加載搜索頁(yè)面之后搂妻,我們要進(jìn)行搜索蒙保。實(shí)際上辕棚,我們想做兩個(gè)不同的搜索。但是邓厕,我們希望在每次搜索之間重新加載搜索頁(yè)面本身逝嚎。我們可以通過4個(gè)簡(jiǎn)單的HTTP請(qǐng)求元素(加載搜索、搜索“A”详恼、加載搜索补君、搜索“B”)來實(shí)現(xiàn)這一點(diǎn)。相反昧互,我們使用Interleave Controller(交替控制器)挽铁,它在每次測(cè)試中傳遞一個(gè)子請(qǐng)求伟桅。它保持排序(也就是說,它不是隨機(jī)傳遞一個(gè)叽掘,而是“記住”它的子元素的位置)楣铁。交叉兩個(gè)子請(qǐng)求可能有點(diǎn)過了頭,但是很可能有8個(gè)或20個(gè)子請(qǐng)求更扁。
注意屬于Interleave控制器的HTTP請(qǐng)求默認(rèn)值盖腕。假設(shè)“Search A”和“Search B”共享相同的路徑信息(HTTP請(qǐng)求規(guī)范包括域、端口浓镜、方法溃列、協(xié)議、路徑和參數(shù)膛薛,以及其他可選項(xiàng))听隐。這是有意義的——這兩個(gè)都是搜索請(qǐng)求,攻擊相同的后端搜索引擎(比方說servlet或cgi-script)哄啄。我們可以將這些信息抽象為單個(gè)配置元素遵绰,而不是在路徑字段中使用相同的信息配置兩個(gè)HTTP Samplers。當(dāng)Interleave控制器“傳遞”來自“Search A”或“Search B”的請(qǐng)求時(shí)增淹,它將用HTTP默認(rèn)請(qǐng)求配置元素的值填充空格椿访。因此,我們?yōu)檫@些請(qǐng)求保留PATH字段為空虑润,并將這些信息放入Configuration元素中成玫。在這種情況下,這充其量只是一個(gè)小好處拳喻,但它展示了這個(gè)特性哭当。
樹中的下一個(gè)元素是另一個(gè)HTTP默認(rèn)請(qǐng)求(HTTP default request),這次添加到線程組本身冗澈。線程組有一個(gè)內(nèi)置的邏輯控制器钦勘,因此,它使用的配置元素與上面描述的完全一樣亚亲。它填入任何經(jīng)過的請(qǐng)求的空格彻采。在web測(cè)試中,在所有HTTP取樣器(HTTP Sampler )元素中保留域字段為空是非常有用的捌归,而不是肛响,將這些信息放到一個(gè)HTTP默認(rèn)請(qǐng)求元素中,并添加到線程組中惜索。通過這樣做特笋,您可以通過更改測(cè)試計(jì)劃中的一個(gè)字段,在不同的服務(wù)器上測(cè)試應(yīng)用程序巾兆。否則猎物,你必須編輯每一個(gè)采樣器虎囚。
最后一個(gè)元素是HTTP Cookie管理器。應(yīng)該將Cookie管理器添加到所有web測(cè)試中——否則JMeter將忽略Cookie蔫磨。通過在線程組級(jí)別添加它溜宽,我們確保所有HTTP請(qǐng)求將共享相同的cookie。
可以將邏輯控制器組合起來以實(shí)現(xiàn)各種結(jié)果质帅。請(qǐng)參閱內(nèi)置邏輯控制器的列表适揉。
?
3.2.3 測(cè)試片段(Test Fragments)
Test Fragment元素是存在于與Thread Group元素相同級(jí)別的測(cè)試計(jì)劃樹上的一種特殊類型的控制器。它與線程組的區(qū)別在于煤惩,它不會(huì)執(zhí)行嫉嘀,除非模塊控制器或Include_Controller引用它。
這個(gè)元素純粹用于測(cè)試計(jì)劃中的代碼重用
?
3.3 監(jiān)聽器(Listeners)
監(jiān)聽器提供對(duì)JMeter運(yùn)行時(shí)收集的有關(guān)測(cè)試用例的信息的訪問魄揉。圖結(jié)果監(jiān)聽器在圖上繪制響應(yīng)時(shí)間剪侮。“查看結(jié)果樹”監(jiān)聽器顯示采樣請(qǐng)求和響應(yīng)的細(xì)節(jié)洛退,并可以顯示響應(yīng)的基本HTML和XML表示瓣俯。其他監(jiān)聽器提供匯總信息或聚合信息。
此外兵怯,監(jiān)聽器可以將數(shù)據(jù)定向到文件彩匕,以便以后使用。JMeter中的每個(gè)監(jiān)聽器都提供一個(gè)字段媒区,用于指示要存儲(chǔ)數(shù)據(jù)的文件驼仪。還有一個(gè)配置按鈕,可用于選擇保存哪些字段袜漩,以及使用CSV還是XML格式绪爸。
注意,所有監(jiān)聽器都保存相同的數(shù)據(jù);唯一的區(qū)別在于數(shù)據(jù)在屏幕上顯示的方式宙攻。
監(jiān)聽器可以添加到測(cè)試中的任何地方奠货,包括直接在測(cè)試計(jì)劃下。他們將只從其同級(jí)和子級(jí)的元素收集數(shù)據(jù)座掘。
有幾個(gè)監(jiān)聽器與JMeter一起出現(xiàn)递惋。
?
3.4 定時(shí)器(Timers)
默認(rèn)情況下,JMeter線程按順序執(zhí)行采樣雹顺,不會(huì)暫停丹墨。我們建議您通過向線程組添加一個(gè)可用的計(jì)時(shí)器來指定延遲。如果不添加延遲嬉愧,JMeter可能會(huì)在很短的時(shí)間內(nèi)發(fā)出太多請(qǐng)求,從而使服務(wù)器不堪重負(fù)喉前。
計(jì)時(shí)器將導(dǎo)致JMeter在其范圍(scope)內(nèi)的每個(gè)采樣器之前延遲一定的時(shí)間没酣。
如果您選擇向一個(gè)線程組添加多個(gè)定時(shí)器王财,JMeter會(huì)在執(zhí)行計(jì)時(shí)器應(yīng)用程序的采樣器之前,將計(jì)時(shí)器暫停的時(shí)間加起來裕便。計(jì)時(shí)器可以作為采樣器或控制器的子級(jí)添加绒净,以限制應(yīng)用它們的采樣器。
要在測(cè)試計(jì)劃中的單個(gè)位置提供暫停偿衰,可以使用測(cè)試動(dòng)作(Test Action)采樣器挂疆。
scope: 3.10節(jié)
?
3.5 斷言(Assertions)
斷言允許您斷言從被測(cè)試的服務(wù)器接收的響應(yīng)的事實(shí)。使用斷言下翎,您實(shí)際上可以“測(cè)試”應(yīng)用程序正在返回預(yù)期的結(jié)果缤言。
例如,您可以斷言對(duì)查詢的響應(yīng)將包含某些特定的文本视事。您指定的文本可以是一個(gè)perl樣式的正則表達(dá)式胆萧,您可以指出響應(yīng)是包含文本,或者它應(yīng)該與整個(gè)響應(yīng)相匹配俐东。
您可以向任何采樣器(Sampler)添加斷言跌穗。例如,可以向HTTP請(qǐng)求添加一個(gè)斷言虏辫,該請(qǐng)求檢查文本“</HTML>”蚌吸。然后,JMeter將檢查該文本是否存在于HTTP響應(yīng)中砌庄。如果JMeter找不到文本套利,那么它將把它標(biāo)記為失敗的請(qǐng)求。
注意鹤耍,斷言適用于所有在其范圍內(nèi)(scope)的采樣器肉迫。若要將斷言限制為單個(gè)采樣器,請(qǐng)將斷言添加為采樣器的子級(jí)稿黄。
要查看斷言結(jié)果喊衫,請(qǐng)向線程組添加斷監(jiān)聽器。失敗的斷言也將出現(xiàn)在樹視圖和表監(jiān)聽器中杆怕,并將計(jì)數(shù)到錯(cuò)誤%年齡族购,例如在聚合和摘要報(bào)告中。
?
3.6 配置元件/素(Configuration Elements)
配置元件與采樣器緊密配合陵珍。盡管它不發(fā)送請(qǐng)求(除了 HTTP(S) Test Script Recorder)寝杖,但它可以添加或修改請(qǐng)求。
配置元件只能從放置元素的樹分支中訪問互纯。例如,如果你把一個(gè)HTTP Cookie Manager放在一個(gè)簡(jiǎn)單的邏輯控制器,Cookie Manager只會(huì)訪問HTTP請(qǐng)求控制器將在簡(jiǎn)單的邏輯控制器(見圖1)瑟幕。Cookie管理器都可以訪問HTTP請(qǐng)求“Web Page 1”和“Web Page 2”,而不是“Web Page 3”。
此外,樹分支中的配置元素比“父”分支中的相同元素具有更高的優(yōu)先級(jí)只盹。例如辣往,我們定義了兩個(gè)HTTP請(qǐng)求默認(rèn)元素“Web Defaults 1”和“Web Defaults 2”。由于我們?cè)谘h(huán)控制器中放置了“Web Defaults 1”殖卑,因此只有“Web Page 2”可以訪問它站削。其他HTTP請(qǐng)求將使用“Web Defaults 2”,因?yàn)槲覀儗⑺旁诰€程組(所有其他分支的“父”)中孵稽。
?
3.7 前置處理器元素(Pre-Processor Elements)
前置處理器在發(fā)出采樣請(qǐng)求之前執(zhí)行一些操作许起。如果前置處理器附加到采樣器元素,那么它將在采樣器元素運(yùn)行之前執(zhí)行菩鲜。前置處理器通常用于在示例請(qǐng)求運(yùn)行之前修改其設(shè)置园细,或者更新未從響應(yīng)文本中提取的變量。有關(guān)何時(shí)執(zhí)行前置處理器的詳細(xì)信息睦袖,請(qǐng)參閱scoping rules(3.10節(jié))珊肃。
?
3.8 后置處理器元素(Post-Processor Elements)
后置處理器在采樣請(qǐng)求完成后執(zhí)行一些操作。如果后置處理程序附加到采樣器元素馅笙,那么它將在采樣器元素運(yùn)行之后執(zhí)行伦乔。后置處理器通常用于處理響應(yīng)數(shù)據(jù),通常用于從中提取值董习。有關(guān)何時(shí)執(zhí)行后置處理器的詳細(xì)信息烈和,請(qǐng)參閱scoping rules(3.10節(jié))。
?
3.9 執(zhí)行順序(Execution order)
- 配置元件/素(Configuration elements)
- 前置處理器(Pre-Processors)
- 定時(shí)器(Timers)
- 采樣器(Sampler)
- 后置處理器(Post-Processors (unless SampleResult is null))
- 斷言(Assertions (unless SampleResult is null))
- 監(jiān)聽器(Listeners (unless SampleResult is null))
請(qǐng)注意皿淋,定時(shí)器招刹、斷言、預(yù)處理器和后處理器只有在應(yīng)用它們的采樣器時(shí)才被處理窝趣。邏輯控制器和采樣器按照它們出現(xiàn)在樹中的順序進(jìn)行處理疯暑。其他測(cè)試元素根據(jù)找到它們的范圍和測(cè)試元素的類型進(jìn)行處理。[在類型中哑舒,元素按照它們出現(xiàn)在樹中的順序進(jìn)行處理]妇拯。
例如,在下面的測(cè)試計(jì)劃中:
- Controller
?Post-Processor 1
?Sampler 1
?Sampler 2
?Timer 1
?Assertion 1
?Pre-Processor 1
?Timer 2
?Post-Processor 2
執(zhí)行的順序是:
Pre-Processor 1
Timer 1
Timer 2
Sampler 1
Post-Processor 1
Post-Processor 2
Assertion 1
Pre-Processor 1
Timer 1
Timer 2
Sampler 2
Post-Processor 1
Post-Processor 2
Assertion 1
?
3.10 范圍規(guī)則(Scoping Rules)
JMeter測(cè)試樹包含分層和有序的元素洗鸵。測(cè)試樹中的一些元素是嚴(yán)格的層次結(jié)構(gòu)(偵聽器越锈、配置元素、后處理器膘滨、前處理器甘凭、斷言、計(jì)時(shí)器)火邓,而一些元素主要是有序的(控制器丹弱、采樣器)德撬。當(dāng)您創(chuàng)建測(cè)試計(jì)劃時(shí),您將創(chuàng)建一個(gè)有序的示例請(qǐng)求列表(通過Samplers)蹈矮,它表示要執(zhí)行的一系列步驟砰逻。這些請(qǐng)求通常是在控制器中組織的鸣驱,這些控制器也是有序的泛鸟。給定以下測(cè)試樹:
請(qǐng)求的順序是,1踊东、2北滥、3、4闸翅。
有些控制器影響子元素的順序再芋,您可以在組件引用中閱讀這些特定的控制器。
其他元素層次坚冀。例如济赎,斷言在測(cè)試樹中是分層的。如果它的父類是請(qǐng)求记某,那么它將被應(yīng)用到該請(qǐng)求司训。如果它的父類是控制器,那么它將影響該控制器的所有后代請(qǐng)求液南。在下面的測(cè)試樹中:
Assertion#1只應(yīng)用于請(qǐng)求1壳猜,Assertion#2應(yīng)用于請(qǐng)求2和3。
另一個(gè)例子滑凉,這次使用計(jì)時(shí)器:
在本例中统扳,請(qǐng)求被命名為反映執(zhí)行它們的順序。計(jì)時(shí)器#1將應(yīng)用于請(qǐng)求2畅姊、3和4(注意咒钟,對(duì)于分層元素,順序是不相關(guān)的)若未。斷言#1只適用于請(qǐng)求3朱嘴。計(jì)時(shí)器#2將影響所有請(qǐng)求。
希望這些示例能夠清楚地說明配置(分層)元素是如何應(yīng)用的陨瘩。如果您想象每個(gè)請(qǐng)求都被傳遞到樹分支上腕够,傳遞給它的父分支,然后傳遞給它的父分支舌劳,等等帚湘,并且每次收集父分支的所有配置元素,那么您將看到它是如何工作的甚淡。
配置元素頭管理器大诸、Cookie管理器和授權(quán)管理器與配置默認(rèn)元素不同捅厂。配置默認(rèn)元素的設(shè)置被合并到采樣器可以訪問的一組值中。但是资柔,管理器的設(shè)置沒有合并焙贷。如果在采樣器的范圍內(nèi)有多個(gè)管理器,則只使用一個(gè)管理器贿堰,但是目前沒有辦法指定使用哪個(gè)管理器辙芍。
?
3.11 屬性和變量 (Properties and Variables)
JMeter屬性在JMeter.properties中定義(請(qǐng)參閱我的JMeter 第一篇文章第1.5節(jié)以了解更多細(xì)節(jié))。
屬性對(duì)于jmeter是全局的羹与,并且主要用于定義一些默認(rèn)的jmeter使用故硅。例如,屬性remote_hosts定義了JMeter遠(yuǎn)程運(yùn)行的服務(wù)器纵搁。屬性可以在測(cè)試計(jì)劃中引用——參見Functions——read a property——但是不能用于特定于線程的值吃衅。
JMeter變量對(duì)每個(gè)線程都是本地的。每個(gè)線程的值可能相同腾誉,也可能不同徘层。
如果一個(gè)變量被一個(gè)線程更新,那么只有該變量的線程副本被更改利职。例如趣效,正則表達(dá)式提取器后置處理器將根據(jù)其線程讀取的示例設(shè)置其變量,這些變量稍后可以被相同的線程使用眼耀。有關(guān)如何引用變量和函數(shù)的詳細(xì)信息英支,請(qǐng)參見函數(shù)和變量。
注意哮伟,測(cè)試計(jì)劃(Test Plan)和用戶定義的變量配置元素定義的值在啟動(dòng)時(shí)對(duì)整個(gè)測(cè)試計(jì)劃可用干花。如果同一個(gè)變量由多個(gè)UDV元素定義,那么最后一個(gè)變量將生效楞黄。一旦一個(gè)線程啟動(dòng)池凄,初始的變量集將被復(fù)制到每個(gè)線程。其他元素如用戶參數(shù)前置處理器或正則表達(dá)式提取器后置處理器可用于重新定義相同的變量(或創(chuàng)建新的變量)鬼廓。這些重新定義只適用于當(dāng)前線程肿仑。
setProperty函數(shù)可用于定義JMeter屬性。這些是測(cè)試計(jì)劃的全局變量碎税,因此可以用來在線程之間傳遞信息——這是需要的尤慰。
變量和屬性都是區(qū)分大小寫的。
?
3.12 使用變量來參數(shù)化測(cè)試 (Using Variables to parameterise tests)
變量不需要改變——它們可以定義一次雷蹂,如果不改變伟端,就不會(huì)改變值。因此匪煌,您可以將它們作為在測(cè)試計(jì)劃中經(jīng)常出現(xiàn)的表達(dá)式的縮寫责蝠〉辰恚或者對(duì)于在運(yùn)行過程中是常量的項(xiàng),但是在運(yùn)行之間可能會(huì)有所不同霜医。例如齿拂,主機(jī)名或線程組中的線程數(shù)。
在決定如何構(gòu)建測(cè)試計(jì)劃時(shí)肴敛,請(qǐng)注意哪些項(xiàng)目在運(yùn)行中是常量署海,但是在運(yùn)行之間可能會(huì)發(fā)生變化。為這些變量確定一些變量名——可能使用命名約定值朋,比如用C_或K_前綴叹侄,或者只使用大寫字母巩搏,以區(qū)別于測(cè)試期間需要更改的變量昨登。還要考慮哪些項(xiàng)需要在線程中是本地的——例如計(jì)數(shù)器或使用正則表達(dá)式后處理器提取的值。您可能希望對(duì)它們使用不同的命名約定贯底。
例如丰辣,您可以在測(cè)試計(jì)劃中定義以下內(nèi)容:
HOST www.example.com
THREADS 10
LOOPS 20
您可以將這些在測(cè)試計(jì)劃中引用為${HOST}${THREADS}等。如果以后想要更改主機(jī)禽捆,只需更改HOST變量的值笙什。對(duì)于少量的測(cè)試來說,這樣做很好胚想,但是在測(cè)試很多不同的組合時(shí)就變得單調(diào)乏味了琐凭。一種解決辦法是使用屬性來定義變量的值,例如:
HOST ${__P(host,www.example.com)}
THREADS ${__P(threads,10)}
LOOPS ${__P(loops,20)}
然后浊服,您可以更改命令行上的一些或所有值统屈,如下所示:
jmeter … -Jhost=www3.example.org -Jloops=13