jmeter節(jié)選第11章進(jìn)階知識(shí)_第1頁
jmeter節(jié)選第11章進(jìn)階知識(shí)_第2頁
jmeter節(jié)選第11章進(jìn)階知識(shí)_第3頁
jmeter節(jié)選第11章進(jìn)階知識(shí)_第4頁
jmeter節(jié)選第11章進(jìn)階知識(shí)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

詳解JMeterJMeter函數(shù)可以被認(rèn)為是某種特殊的變量,它們可以被采樣器或者其他測(cè)試元件所引用。${其中,functionName匹配被調(diào)用的函數(shù)名稱。用圓括號(hào)包含函數(shù)的形參,例如${time(YMD)}JMeter函數(shù)不要求參數(shù),則可以不使用圓括號(hào),例如${threadNum}。${time(EEE\,dMMM用返回的值就是引用自身。例如,假設(shè)字符串UNDEF沒有被定義為變量,那么${UNDEF}返回的值就是${UNDEF}。變量、函數(shù)(包括屬性)都是大小寫敏感的。JMeter2.3.1及其后續(xù)版本會(huì)剔除參數(shù)名中的空格,例如,${Random(1,63LOTTERY)}中的“LOTTERY”會(huì)被貼 屬性不同于變量。變量對(duì)線程而言是局部的,所有線程都可以訪問屬性,就使用P或貼 property函數(shù)11-1JMetergetthreadgetthelocalmachinereturncurrenttimeinvariouslog(ordisplay)amessage(andreturnthelog(ordisplay)amessage(emptyreturnreadalinefromareadanentirereadfromCSVdelimitedUseanXPathexpressiontoreadfromagenerateanincrementingaddintaddlonggeneratearandomrunaBeanShellevaluateaCommonsJexlreadaPreadaproperty(shorthandsetaJMeterSplitastringintoVevaluateavariableevaluateavariableevaluateanexpressionstoredinaparsepreviousresponseusingaregulargenerateUnicodecharvaluesfromalistofProcessstringscontainingJavaescapes(e.g.\n&EncodestringsusingHTML求的DOMAIN域,例如,做出輕微改動(dòng),就可以讓同一個(gè)測(cè)試腳本適配多個(gè)服務(wù)器。V(ar${N})}本中可以使用${BeanShell(vars.get("Var${N}")}。小 士將函數(shù)用于測(cè)試計(jì)劃(TestPlan)的設(shè)置時(shí),會(huì)受到一些限制。此種情況下,JMeter線程會(huì)生效。如此一來,split()、regex()及變量賦值函數(shù)就都不能正常工作。函數(shù)threadNum()同樣不能正常工作,該函數(shù)在測(cè)試計(jì)劃層沒有意義。在測(cè)試計(jì)劃中,函數(shù)intSum、longSum、machineName、BeanShell、javaScript、jexl、random、time、propertyfunctions、logfunctions應(yīng)如在UDV被處理前是不能使用的。小 士SELECTitemfromtablewhereSELECTitemfromtablewhere函數(shù)使用相同的辦法加以引用,但是依據(jù)慣例,函數(shù)名以“”開頭,以區(qū)別于變量名。${SCRIPT${SCRIPT變量的內(nèi)容進(jìn)行轉(zhuǎn)義,因?yàn)楹瘮?shù)的調(diào)用先于變量被其值所替換。該方法適合于BSF或者BeanShell采樣器,這兩種采樣器可以用于測(cè)試JavaScript、Jexl和BeanShell腳本。函數(shù)可以引用變量及其他函數(shù),例如${XPath(${P(xpathfile),${XPATH“xpathfile”作為文件名,變量XPATH的內(nèi)容作為搜索表達(dá)式。小貼“,”或者“\”之前的反斜線會(huì)被移除。這個(gè)操作對(duì)于嵌套函數(shù)(士用戶可以使用logn()函數(shù)來報(bào)告變量或者函數(shù)的值。logn()函數(shù)可以在測(cè)試計(jì)劃中的任何地方被引用,前提條件是被報(bào)告的值已經(jīng)被定義。另外,Java請(qǐng)求采樣器可以被用來產(chǎn)生一個(gè)DebugSampler,可以使用它來展示變量的值(如在查看結(jié)果樹中展示。小士貼士“Function如圖11-1所示。11-1函數(shù)助手(FunctionHelper)11-1regexFunction6個(gè)參數(shù)中,測(cè)試人值。例如,如果測(cè)試人員輸入“refName”作為第6個(gè)參數(shù),那么測(cè)試人員可以使用:${refName}2個(gè)參數(shù)(Templateforthereplacementstring)的計(jì)算結(jié)果,這依參數(shù)如表11-2所示。11-21個(gè)參數(shù)是用于解析服務(wù)器響應(yīng)數(shù)據(jù)的正則表達(dá)式。它會(huì)找到所有一定記得為其加上圓括號(hào)。例如,<ahref="(.*)">。這樣就會(huì)將鏈接的值存放到第一個(gè)匹配組合中(這里只有一個(gè)匹配組合)。又如,<input是是3個(gè)參數(shù)告訴JMeter使用第幾次匹配。測(cè)試人員的正則表達(dá)式可能會(huì)找到多個(gè)匹配項(xiàng)。對(duì)此,測(cè)試人員有4種選擇:否否否否11。計(jì)數(shù)器既可以被配置成針對(duì)目前計(jì)數(shù)器函數(shù)實(shí)例是獨(dú)立實(shí)現(xiàn)的(JMeter2.1.1及其以前版本,使用一個(gè)固定的線程變量11-3是引用它的值(JMeter2.1.1及其以前版本,這個(gè)參數(shù)是必需的)否函數(shù)threadNum只是簡(jiǎn)單地返回當(dāng)前線程的編號(hào)。線程編號(hào)不依賴于線程組,這就意味小這一函數(shù)不能用在任何配置元件中(如用戶定義的變量)貼士立線程運(yùn)行的。另外在測(cè)試計(jì)劃(TestPlan)函數(shù)intSum可以被用來計(jì)算兩個(gè)或者更多整數(shù)值的合。參數(shù)如表11-4所示。11-4是是否否 JMeter2.3.1及其以前版本,要求必須有引用名參數(shù)。后續(xù)JMeter版本中,引用名是可士 士函數(shù)longSum可以被用來計(jì)算兩個(gè)或者更多長(zhǎng)整型值的合。參數(shù)如表11-5所示。11-5是是否否CSVDataSetConfig,也能達(dá)到相同的目的,而且方法更簡(jiǎn)單。但是該配置**ERR**參數(shù)如表11-6所示。11-6是否否否pin#'.'dat->pin1.dat,...pin9.dat,pin10.dat,...pin000'.'dat->pin001.dat...pin099.dat...pin999.dat...pin9999.datpin'.'dat#->pin.dat1,...pin.dat9...pin.dat999,函數(shù)machineName返回本機(jī)的主機(jī)名。參數(shù)如表11-7所示。11-7否函數(shù)Java_javaScriptJavaScript解釋器。JavaScript會(huì)作為腳本語言使用,因此測(cè)試人Rhinoscript小 士11-8待執(zhí)行的JavaScriptMath.floor(Mathrandom()*(${maxRandom}+1)):在0和變量om}+1)):在變量minRandom和maxRandom之間的隨機(jī)數(shù)是否 貼 如,${javaScript('${sp}'.slice(7\,99999))},對(duì)7之后的逗號(hào)進(jìn)行了轉(zhuǎn)義函數(shù)Random會(huì)返回指定最大值和最小值之間的隨機(jī)數(shù)。參數(shù)如表11-9所示。11-9是是否 JMeter1.9.1以前的版本僅支持從單個(gè)文件中讀取,JMeter1.9.1及其以后版本支持從多貼 用很重要,哪怕操作系統(tǒng)不區(qū)分大小寫,CSVRead(abc.txt,0)和CSVRead(aBc.txt,0)會(huì)引用不同貼 貼士11-10是=是COL1a${COL1b${CSVRead(random.txt,0)}COL2b${CSVRead(random.txt,1)}${ 貼 文件,請(qǐng)使用配置元件CSVDataSet或者StringFromFile函數(shù)propertyJMeter屬性的值。如果函數(shù)找不到屬性值,而又沒有提供默認(rèn)${property(user.dir)}user.dir{ ${property(abcd,ABCD,atod)}:返回屬性abcd的值(如果屬性沒有定義,返回“atod”),并保存在變量ABCD中。11-11是否否函數(shù)_Pjmeter-Jgroup1.threads=7-${P(group1.loops)}group1.loops${P(hostname,)}hostname的值,如果沒有定義該屬性則返回值。(除非這些屬性在其他地方有定義。11-12是否函數(shù)log會(huì)記錄一條日志,并返回函數(shù)的輸入字符串。參數(shù)如表11-13所示。11-13是或者否否否OUTERRSystem.outSystem.err中。在這種${log(Message)}:寫入日志文件,形如“...threadNameMessage${log(Message,OUT)}${log(${VAR},,,VAR=)}:寫入日志文件,形如“...threadNameVAR=value”。14)logn函數(shù)logn會(huì)記錄一條日志,并返回空字符串。參數(shù)如表11-14所示。11-14是OUT,ERR,DEBUGINFO(默認(rèn)),WARN否否OUTERRSystem.outSystem.err中。在這種函數(shù)BeanShellBeanShellBeanShellWeb站點(diǎn):/。單個(gè)函數(shù)實(shí)例可以從多個(gè)線程調(diào)用。另外,該函數(shù)的execute()方法是同步的。:函數(shù)11-15一個(gè)BeanShell腳本(不是文件名是否${BeanShell(123*456)}56088小 請(qǐng)記得為文本字符串及代表文本字符串的JMeter變量添加必要的引號(hào)士函數(shù)split會(huì)通過分隔符來拆分傳遞給它的字符串,并返回原始的字符串。如果分隔符緊一個(gè)變量,會(huì)返回“ForEachsplit會(huì)刪除第一個(gè)不${前版本、VAR_1=a、VAR_2=?、VAR_3=c、VAR_4=?(null,JMeter2.1.1及其以前版本11-16是否否小

${XPath(/path/to/build.xml,參數(shù)如表11-17所示。11-17是是函數(shù)setPropertyJMeter屬性的值。函數(shù)的默認(rèn)返回值是空字符串,因此該函數(shù)屬性對(duì)于JMeter是全局的,因此可以被用來在線程和線程組之間通信。參數(shù)如表11-18所示。11-18是是否函數(shù)time可以通過多種格式返回當(dāng)前時(shí)間。參數(shù)如表11-19所示。11-19否否兩個(gè)網(wǎng)頁鏈接獲取更多關(guān)于JEXL的信息。11-20是否OUTSystem.outOUT.println("message")。JEXL可以基于它們來創(chuàng)建類,或者調(diào)用方法,例如: JMeter2.3.2以后的版本允許在表達(dá)式中包含多個(gè)聲明。JMeter2.3.2及其以前的版本只貼 V函數(shù),函數(shù)參數(shù)如表11-21所示。11-21是函數(shù)customers11-22是函數(shù)name='${name}',那么通過${eval(${SQL})},就能執(zhí)行“selectagefrombirthdayswhere11-23是函數(shù)charUnicode字符,另外還請(qǐng)參考下面unescape()函數(shù)。參數(shù)如表11-24所示。11-24Unicode字符編碼(是${char(0xC,0xA)}=${char(165)}=???參數(shù)如表11-25所示。11-25是${unescape(\r\n)}=${unescape(1\t2)}=函數(shù)“<Franais>11-26是函數(shù)escapeHtml用于轉(zhuǎn)義字符串中的字符(HTML實(shí)體HTML4.0實(shí)體。例如,"bread"&"butter"變?yōu)?quot;bread"&"butter"。11-27是函數(shù)FileToString可以被用來讀取整個(gè)文件。每次對(duì)該函數(shù)的調(diào)用,都會(huì)讀取整個(gè)文件。**ERR**11-28是否否戶擁有對(duì)變量名的完整控制權(quán)。但是有些變量是JMeter內(nèi)置的。例如,START變量(參見后續(xù)內(nèi)容)JMeterJMeterJMeterJMeter請(qǐng)注意:START變量/JMeter啟動(dòng)時(shí)間,而非測(cè)試的啟動(dòng)時(shí)間。它們主要用詳解JMeterJMeter中包含范本匹配軟件ApacheJakartaOROJakarta網(wǎng)站上有一些關(guān)于它的文檔,例如asummaryofthepatternmatchingcharacters:OROMatcherUser'sguide,也許會(huì)有一些幫助。URL地址:/oro/docs/OROMatcher/indexhtml。表達(dá)式的文檔(perlrequick、perlretut、perlre、perlreref。包含(Contains)意味著正則表達(dá)式至少部分匹配目標(biāo),例如,'alphabet'ph.b.',在這一情況下,它等同于使用^和$封裝正則表達(dá)式,即'^al.*t$'。但是事情并不總是這樣。小

不同于假設(shè)測(cè)試人員期望匹配Web頁面的如下部分:name="file"value="readme.txt">并提取name="file"value="(.+?)">。() 小 士盡管上面的表達(dá)式可以達(dá)到目的,但是使用如下表達(dá)式更有效率:name="file"value="([^"]+)">,其中[^"]-意味著匹配任何東西(除了。在這種情況下,匹配引擎在找到第假設(shè)測(cè)試人員期望匹配Web頁面的如下部分:name="file"value="readme.txt">,并提取filename和="([^"]+)" 小 不要用//封裝正則表達(dá)式士+?^$:字符串或行的起始和結(jié)尾。注意,ORO不支持\Q和\E關(guān)鍵字。存在一個(gè)BUG,修改器不能放在正則表達(dá)式的末尾。盡管修改器在這里不生效。MatchExActcaseor(?i)ArBiTrARY(?-i)模式下,“”還匹配換行。詳解JMeterJMeter,測(cè)試人員可以跨越多臺(tái)低端計(jì)算機(jī)復(fù)制測(cè)試,這樣就可以模擬一個(gè)并通過它們收集測(cè)試數(shù)據(jù),如圖11-3所示。這樣一來,就有了如下特性: 貼 1.4GHz~3GHzCPU、1GBJMeter100~300。但是器產(chǎn)生,網(wǎng)卡和交換機(jī)端口都可能產(chǎn)生瓶頸,所以一個(gè)JMeter客戶端線程數(shù)不應(yīng)超過100。用大量的JMeter遠(yuǎn)程服務(wù)器,可能會(huì)導(dǎo)致客戶端過載,或者網(wǎng)絡(luò)連接發(fā)生擁塞。11-3JMeterJMeter遠(yuǎn)程測(cè)試的基本步驟:步驟1:配置節(jié)點(diǎn)有操作系統(tǒng)上使用相同的Java版本。JMeterperties或者試計(jì)劃之中,從而影響測(cè)試執(zhí)行(例如,與其他遠(yuǎn)程服務(wù)器發(fā)生交互。另外,不同的JMeterJMeterJMETER_HOME/bin/jmeter-server(UNIX)或者JMETER_HOME/bin/jmeter-server.bat(Windows)腳本。JMeterRMI端注冊(cè)。假設(shè)測(cè)試人員一定要單獨(dú)啟動(dòng)RMI注冊(cè),可以在遠(yuǎn)程節(jié)點(diǎn)上定義JMeter屬性reote_hostsJMeterIPIP地址,以逗號(hào)作為請(qǐng)注意測(cè)試人員還可以使用-R命令行選項(xiàng)來指明將會(huì)使用的遠(yuǎn)程服務(wù)器。這與使用-r-后就會(huì)退出。-Z標(biāo)志也有同樣的效果,參見后面的內(nèi)容。4(aJMeterGUIMS-Windows環(huán)境下運(yùn)行“bin/jmeter.bat”腳本,UNIX環(huán)境下運(yùn)行“bin/jmeter”腳本。測(cè)試人員會(huì)發(fā)現(xiàn)在運(yùn)行(Run)菜單下,包含兩個(gè)子JMeterIPJMeter jmeter-n-tscript.jmx-jmeter-n-tscript.jmx-R開發(fā)者預(yù)期的范圍內(nèi))JMeter遠(yuǎn)程服務(wù)器(2),其中包2(aJMeter2.3.1開始,JMeterRMI注冊(cè),因此這里的內(nèi)容不適用于普通情況。如果要采用歷史版本的操作方法,首先在JMeter遠(yuǎn)程服務(wù)器上定義JMeter屬性JMeterRemoteMethodInvocation(RMI)作為遠(yuǎn)程通信機(jī)制。因此,測(cè)試人員需要用rRmiregistry如下jar存在于測(cè)試人員的系統(tǒng)claspath中:端口1099。JMeter/RMI要求建立一個(gè)從客戶端到遠(yuǎn)程服務(wù)器的連接。這就會(huì)用到測(cè)試人員所選擇的端JMeterSuseLinux上,下面這些技巧對(duì)測(cè)試人員可能會(huì)有幫助。默認(rèn)的安裝可debuggingJMeter2.3.1版本開始,RMIJMeter遠(yuǎn)程服務(wù)器JMeterjmeters-Dsun.rmi.loader.logLevel=verbose”(省略了-J。另外這些屬性還可以被定義在(Loopback`dirname$0`/jmeter-s`dirname$0`/jmeter$HOST-sJMeter2.1.1版本開始,jmeter-server腳本支持改變端口號(hào)。例如,假設(shè)測(cè)試人員希望使用端口號(hào)1664(可能因?yàn)?099端口已經(jīng)被其他應(yīng)用程序占用了。Windows(DOS窗口中C:\JMETER>SETC:\JMETER>JMETER-SERVER[other$SERVER_PORT=1664jmeter-server[otheroptions][N.B.useuppercasefortheenvironmentvariable]Rmiregistry,接著以遠(yuǎn)程服務(wù)器模式啟動(dòng)和JMeter客戶端產(chǎn)生很大的壓力。用戶可以通過設(shè)置一些屬性,來改變默認(rèn)操作。(Mode(線程組(ThreadGroup)名稱和采樣標(biāo)簽(SampleLabel)進(jìn)行概要統(tǒng)計(jì)。積累的數(shù)據(jù)域包括:elapsedtime、latency、bytes、samplecount、errorcount,其他數(shù)據(jù)域?qū)?huì)被丟Customimplementation:將模式參數(shù)設(shè)置為測(cè)試人員的客戶化采樣發(fā)送器的類名。該類必須實(shí)現(xiàn)接口SampleSender,并且類的構(gòu)造函數(shù)只有一個(gè)RemoteSampleListener型詳解JMeterJMeter有效線程數(shù)目。另外這還依賴于待測(cè)服務(wù)器的性能(JMeter的負(fù)擔(dān),因?yàn)樗憫?yīng)請(qǐng)求的速度更快JMeter線程越多,統(tǒng)計(jì)得到的時(shí)間信息就越不準(zhǔn)確。JMeter負(fù)擔(dān)越重,每一個(gè)線程等待CPU的時(shí)間就越在多臺(tái)機(jī)器上運(yùn)行多個(gè)非GUIJMeter實(shí)例。11-5CSVDataSet(CSVDataSet)AccessLogSampler(在這里不能IncludeController,因?yàn)樗鼤?huì)將指定文件中的所有測(cè)試元件直接添加到測(cè)試計(jì)劃中Mode到數(shù)據(jù)文件中,以CSVDataset方式讀取。這樣就能避免在測(cè)試運(yùn)行階段浪費(fèi)資源。試計(jì)劃中改變變量LOOPS的值。不存在,就使用默認(rèn)值10。屬性“l(fā)oops”接下來可以在JMeter命令行中定義:jmeter...-Jloops=12...。如果有很多屬性需要一起改變,那么解決辦法就是使用一組屬性文件。用戶可以使用命令行-q選項(xiàng),以便將合適的屬性文件傳遞給JMeter。貼 這里沒有安全機(jī)制。任何人只要能連接上對(duì)應(yīng)端口,就能執(zhí)行任何BeanShell命令。這些貼士在上面的例子中,BeanShell900090019000將HTTP9001Telnet訪問。startup.bshBeanShell服務(wù)器處startup中定義了設(shè)置/JMeter及系統(tǒng)屬性的各種方法。測(cè)試人員可以在JMeter控制臺(tái)中看到如下內(nèi)容:StartupscriptrunningStartupscriptcompletedHttpdstartedonport:9000Sessiondstartedonport:9001以屬性的形式定義的,形如${P(throughput)}BeanShell命令可以被用于改變測(cè)試://Startvalueinc=Integer.decode(args[1]);//Incrementend=Integer.decode(args[2]);//Finalvaluesecs=Integer.decode(args[3]);//Waitbetweenchangeswhile(curr<=end){setprop("throughput",curr.toString());//Needstobeastringherecurr+=}troughpt.bhjava-jar../lib/bshclient.jarlocalhost9000throughput.bsh705100BeanShell測(cè)試元件都有獨(dú)立的解釋器備份(針對(duì)每個(gè)線程。如果測(cè)試元件被重復(fù)調(diào)用,例如,被放在循環(huán)之中,那么在多次調(diào)用間解釋器將被保留,除非選中了“Resetbsh.Interpreterbeforeeachcall”復(fù)選框,如圖11-6所示。11-6BeanShell$java-cpbsh-xxx.jar[;otherjarsasneeded]bsh.Interperterfile.bsh$java–cpbsh-xxx.jarbsh.Interperterbsh%source("file.bsh");bsh%exit();//oruseEOFkey(e.g.^Zorstartup(初始化)腳本中。它們將會(huì)被一直保留下來,跨越測(cè)試元件的多次調(diào)用,除非使用到了reset選項(xiàng)。腳本同樣可以訪問JMeter變量,只需使用“vars”變量的get()和put()方法,例如,vars.get("HOST");vars.put("MSG","Successful");。get()put()方法只支持字符串類型的變量,getObject()putObject()方法可

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論