運(yùn)行jmeter.bat(在window平臺上)或jmeter(在unix平臺上)來運(yùn)行JMeter尔邓。(運(yùn)行成功后租悄,會出現(xiàn)下面的界面)
測試計劃里的元件
測試計劃對象里有一個新的叫做“功能測試”的選擇框炕舵,。如果選中,JMeter將會記錄從每個服務(wù)器的每個樣本返回的數(shù)據(jù)伸辟。如果你在監(jiān)聽器里選擇一個文件,那么這些返回的數(shù)據(jù)會被寫入這個文件馍刮。如果你在測試是否JMeter被正確配置和服務(wù)器是否返回期望的結(jié)果信夫,這是很有用的。結(jié)果是記錄返回數(shù)據(jù)的文件將會很快變的巨大卡啰,接著JMeter的性能也會降低静稻。如果你在做壓力測試,這個選項應(yīng)該關(guān)閉匈辱。(它默任是關(guān)閉的)
如果你沒有向文件中記錄數(shù)據(jù)振湾,那么這個選項不會造成任何區(qū)別。
線程組
線程組元件是任何一個測試計劃的開始點(diǎn)亡脸。在一個測試計劃中的所有元件都必須在某個線程組下押搪。顧名思義树酪,線程組元件控制JMeter執(zhí)行你的測試計劃時候使用的線程數(shù)量。對線程組的控制允許你:
設(shè)置線程數(shù)
設(shè)置ramp-up period
設(shè)置測試要執(zhí)行的次數(shù)
每個線程將會完全獨(dú)立的運(yùn)行測試計劃大州,互不干擾续语。多個線程用于模仿對服務(wù)器的并發(fā)訪問。
ramp-up period指示JMeter用于達(dá)到全部選擇的線程的時間厦画。如果選擇了10個線程疮茄,并且ramp-up period是100秒,那么JMeter將使用100秒使10個線程啟動并運(yùn)行根暑。每個線程將在前一個線程啟動后10(100/10)秒后啟動力试。如果有30個線程并且ramp-up period是120秒,那么相繼的線程交間隔4秒购裙。Ramp-up需要足夠長的時間來避免在開始測試時產(chǎn)生太大的負(fù)荷懂版,并且有足夠短的時間使最后一個線程在第一個線程結(jié)束之前運(yùn)行。(除非你想那樣做)開始的Ramp-up =線程數(shù)+必須的調(diào)節(jié)數(shù)躏率,缺省情況下躯畴,線程組被配置為不確定的循環(huán)執(zhí)行它下面的元件。另外薇芝,你可以設(shè)置線程組在結(jié)束前循環(huán)的次數(shù)蓬抄。如果次數(shù)設(shè)置為1,那么JMeter在停止前只執(zhí)行測試計劃一次夯到。1.9版引入了一個測試運(yùn)行行調(diào)度器嚷缭,點(diǎn)擊線程組面板的下方的復(fù)選框來顯示兩個額外的字段,可以輸入運(yùn)行開始和結(jié)束時間耍贾。當(dāng)測試開始時阅爽,如果設(shè)置了調(diào)度器,JMeter將等待直到到了開始時間荐开。在每個周期結(jié)束付翁,JMeter將會檢查是否到達(dá)結(jié)束時間,如果是這樣的話晃听,停止運(yùn)行百侧,否則測試?yán)^續(xù)運(yùn)行直到達(dá)到了重復(fù)限制。
2控制器
JMeter有兩種類型的控制器:取樣器和邏輯控制器能扒。取樣器指示JMeter向一個服務(wù)器發(fā)送請求佣渴。例如,如果你想讓JMeter發(fā)送HTTP請求初斑,那么添加一個HTTP請求器辛润。你可以向一個取樣器中添加一個或多個配置元件來定制請求。查看取樣器獲得更多信息见秤。邏輯控制器允許你定制JMeter何時發(fā)送請求频蛔。例如灵迫,你可以添加交替(Interleave)邏輯控制器來在兩個HTTP請求取樣器之間輪流。查看邏輯控制器獲得更多信息晦溪。
2.1 取樣器
取樣器指示JMeter向服務(wù)器發(fā)送請求。JMeter目前有如下取樣器:
FTP請求
HTTP請求
JDBC請求
JAVA對象請求
LDAP請求
SOAP/XML-RPC請求
WEB服務(wù)(SOAP)請求(Alpha Code)
每個取樣器有幾個可以設(shè)置的屬性挣跋。你可以向取樣器添加一個或多個配置元件來進(jìn)一步的控制取樣器三圆。除此之外,JMeter以你向樹中添加取樣器的順序發(fā)送請求避咆。
如果你想向一個服務(wù)器發(fā)送同種類型(例如:HTTP請求)的多個請求舟肉。考慮使用缺省配置元件(Defaults Configuration Element)查库。每個控制器有一個或多個缺省元件(見下文)路媚。
記得向線程組添加一個監(jiān)聽器來查看和/或存儲請求結(jié)果到磁盤。
如果想讓JMeter在請求的回復(fù)上做基本的驗證樊销,添加一個斷言到請求控制器整慎。例如,在對WEB應(yīng)用做壓力測試時围苫,服務(wù)器會返回一個成功的“HTTP回復(fù)”代碼裤园,但頁面可能會有錯誤或缺少內(nèi)容。你可以添加斷言來檢查某些特定的HTML標(biāo)簽剂府,一般的錯誤字符串拧揽,等等。JMeter允許你使用正則表達(dá)式創(chuàng)建這些斷言腺占。
2.2 邏輯控制器
邏輯控制器允許你定制JMeter何時發(fā)送請求淤袜。邏輯控制器可能包話如下的子元件:取樣器(請求),配置元件衰伯,其它的邏輯控制器铡羡。邏輯控制器能夠更改它的子元件中的請求的順序。他們可以自己修改請求嚎研,使JMeter重復(fù)請求蓖墅,等等。要理解邏輯控制器對測試計劃的影響临扮,假設(shè)如下的測試樹:
測試計劃
線程組
僅一次控制器
登錄請求
加載搜索頁
交替控制器
搜索‘A’
搜索‘B’
默任HTTP請求
默任HTTP請求
Cookie管理器
這個測試首先是執(zhí)行登錄請求论矾,它在整個測試過程中只執(zhí)行一次。后面的反復(fù)執(zhí)行將跳過它杆勇。這是由于使用了僅一次控制器贪壳。
登錄后,取樣器接著會加載搜索頁(想像一個用戶登錄進(jìn)去蚜退,然后打開搜索頁來搜索信息這樣一個WEB應(yīng)用闰靴。)這只是一個簡單的取樣器請求彪笼,沒有用任何邏輯控制器過濾。加載完搜索頁后蚂且,我們想搜索一下配猫,事實(shí)上,我們想做兩種不同的搜索杏死。然而泵肄,我們想在每個搜索之間重新加載搜索頁面。我們可以通過使用四個簡單的HTTP請求元件(加載搜索頁面淑翼,搜索‘A’腐巢,加載搜索頁面,搜索‘B’)玄括》氡或者使用交替控制器,它一次傳遞一個子請求到這個測試遭京。按子元件的排列順序胃惜。交替2個子請求可能有點(diǎn)大材小用,但是如果有8或是20個子請求洁墙,那么它使用它將很簡單蛹疯。注意HTTP默任請求是在交替控制器里。設(shè)想一下热监,“搜索A”和“搜索B”共享相同的目錄信息(一個規(guī)范的HTTP請求包括域捺弦,端口,方法孝扛,協(xié)議列吼,路經(jīng),參數(shù)和一些其它可選選項)This makes sense-兩個搜索請求苦始,都使用相同的后臺搜索引擎(我們可以暫說它是一個servlet或是cgi腳本)寞钥。勝于配置兩個使用相同路經(jīng)信息的HTTP取樣器,我們能夠把信息提取到單獨(dú)的一個配置元件陌选。當(dāng)交替控制器把請求從“搜索A”傳遞到“搜索B”時理郑,它會把HTTP默任請求配置元件值填在空白值里。因此我們把那些請求的路經(jīng)信息置空咨油,把那些信息放在配置元件里您炉。在這個例子里,只利用一點(diǎn)它的優(yōu)勢役电,以后還來會再論述它赚爵。這個樹的下一個元件是另一個HTTP默任請求,這次單獨(dú)把它放在線程組里。線程組有一個內(nèi)置的邏輯控制器冀膝,因些唁奢,它可以向上面說的那樣,精確的使用配置元件窝剖。它會填上空白處來傳遞任何一個請求麻掸。它在網(wǎng)站測試時,置空你所有的HTTP取樣器的域值枯芬,把那些信息放在HTTP默任請求元件里论笔,然后加到線程組時特別有用。通過這樣做千所,你可以在不同的服務(wù)器上通過簡單的改變你的測試計劃里的一個值來測試你的應(yīng)用。否則蒜埋,你不得不在每個取樣器淫痰,每個值修改一次。
最后一個元件是HTTP Cookie管理器整份。你因該在所有的網(wǎng)站測試?yán)锾砑右粋€Cookie管理器待错,否則JMeter會忽略Cookie。通過添加它到線程組這一層烈评,我們可以確保所有的HTTP請求可以共享相同的Cookie火俄。你可以添加多個邏輯控制器來達(dá)到各種不同的結(jié)果〗补冢看內(nèi)置邏輯控制列表瓜客。
3.監(jiān)聽器
當(dāng)JMeter運(yùn)行時,監(jiān)聽器可以提供訪問JMeter所收集的關(guān)于測試用例的信息竿开。圖像結(jié)果監(jiān)聽器在一個圖表里繪制響應(yīng)時間谱仪。查看結(jié)果樹監(jiān)聽器具體的顯示取樣器的請求和響應(yīng),然后以HTML和XML格式顯示出來否彩。其它的監(jiān)聽器提供匯總或組合信息疯攒。此外,監(jiān)聽器能處理一個為日后所用列荔,收集到一個文件里的數(shù)據(jù)敬尺。在JMeter里的每個監(jiān)聽器都可以指定一個文件,用來存儲數(shù)據(jù)贴浙。你可以在測試的任何地方添加監(jiān)聽器砂吞。它們只會收集從這個元件開始到這一層最低層的數(shù)據(jù)。JMeter自帶很多有趣的監(jiān)聽器悬而。
4.定時器
默任呜舒,JMeter線程發(fā)送出的每個請求是不間斷的。我們建意你通過添加一個可用的定時器到你的線程組里來指定延遲時間。如果你不添加延時袭蝗,JMeter可能在較短的時間內(nèi)發(fā)送大量的請求致使你的服務(wù)器癱瘓唤殴。定時器將導(dǎo)致JMeter在線程組里,在每個請求間到腥,延遲一定時間朵逝。如果你想在一個線程組里添加一個以上的定時器,JMeter會在執(zhí)行你所應(yīng)用的那個取樣器之前累加所有的計時器乡范,然后以那累加后的時間來做停頓配名。
5.?dāng)嘌?/p>
斷言允許你斷言從被測的服務(wù)器端接收到的響應(yīng)的事實(shí)。使用斷言晋辆,你能“根本上測試”你的應(yīng)用返回的你預(yù)期的結(jié)果渠脉。例如,你可以斷言一個查詢將返回包括一些特定文本的記錄瓶佳。這個文本可能是PERL格式的正態(tài)表達(dá)式芋膘,并且你可以指明這個返回將包括文本或它應(yīng)該可能匹配整個反應(yīng)。你可以添加斷言到任意一個取樣器里霸饲,例如为朋,你可以添加斷言到一個HTTP請求來檢查文本“</HTML>”。JMeter會檢查這個文本是否在HTTP響應(yīng)里厚脉,如果JMeter找不到习寸,它將把這個請求標(biāo)記為“失敗的請求”。要查看斷言結(jié)果傻工,添加斷言監(jiān)聽器到這個線程組霞溪。
6.配置元件
配置元件工作和取樣器很接近,盡管它不能發(fā)送請求(HTTP代理服務(wù)器除外)精钮,它可以補(bǔ)充或修改請求威鹿。只有在你放置元件的樹分枝里面,才能訪問配置元件轨香。例如忽你,如果你把HTTP Cookie管理器放在一個簡單邏輯控制器里,那么只有你放在簡單邏輯控制器里的HTTP請求控制器才能訪問這個Cookie管理器(見圖1)臂容】砌ǎ“網(wǎng)頁1”和“網(wǎng)頁2”可以訪問這個Cookie管理器,但“網(wǎng)頁3”則不行脓杉。并且糟秘,在樹分枝里的配置元件比在父級分枝同樣的元素有更高的優(yōu)先權(quán)。例如球散,我們定義兩個HTTP默任請求元件“默任網(wǎng)頁1”和“默任網(wǎng)頁2”尿赚。因為我們把“默任網(wǎng)頁1”放在循環(huán)控制器里,只有“網(wǎng)頁2”可以訪問它。因為我們把它放在線程組里凌净,其它HTTP請求將使用“默任網(wǎng)頁2”悲龟。
圖1-實(shí)驗計劃顯示配置元件的Accessability
7.前置處理器
前置處理器在取樣器請求前執(zhí)行一些操作。如果前置處理器附有取樣器元件冰寻,那么它將先于這個取樣器元件執(zhí)行须教。前置處理器常用于在取樣器元件運(yùn)行前修改它的設(shè)置,或是更新從響應(yīng)文本里投取不出來的變量斩芭。當(dāng)執(zhí)行前置處理器時轻腺,再具體參看作用范圍規(guī)則。
8.后置處理器
后置處理器在取樣器請求后執(zhí)行一些操作划乖。如果后置處理器附有取樣器元件贬养,它將在那個取樣器元件運(yùn)行之后運(yùn)行。后置處理器多用于處理響應(yīng)數(shù)據(jù)琴庵,從里面抽取出有價值的東西煤蚌。當(dāng)執(zhí)行后置處理器時,再具體參看作用范圍規(guī)則细卧。
9.執(zhí)行順序
1. 定時器–如果有的話
2. 取樣器
3. 后置處理器(除非SampleResult是空)
4. 斷言(除非SampleResult是空)
5. 監(jiān)聽器(除非SampleResult是空)
點(diǎn)擊下載:全棧性能測試修煉寶典JMeter實(shí)戰(zhàn)(陳志勇).pdf