




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
詳解JMeterJMeter函數可以被認為是某種特殊的變量,它們可以被采樣器或者其他測試元件所引用。${其中,functionName匹配被調用的函數名稱。用圓括號包含函數的形參,例如${time(YMD)}JMeter函數不要求參數,則可以不使用圓括號,例如${threadNum}。${time(EEE\,dMMM用返回的值就是引用自身。例如,假設字符串UNDEF沒有被定義為變量,那么${UNDEF}返回的值就是${UNDEF}。變量、函數(包括屬性)都是大小寫敏感的。JMeter2.3.1及其后續版本會剔除參數名中的空格,例如,${Random(1,63LOTTERY)}中的“LOTTERY”會被貼 屬性不同于變量。變量對線程而言是局部的,所有線程都可以訪問屬性,就使用P或貼 property函數11-1JMetergetthreadgetthelocalmachinereturncurrenttimeinvariouslog(ordisplay)amessage(andreturnthelog(ordisplay)amessage(emptyreturnreadalinefromareadanentirereadfromCSVdelimitedUseanXPathexpressiontoreadfromagenerateanincrementingaddintaddlonggeneratearandomrunaBeanShellevaluateaCommonsJexlreadaPreadaproperty(shorthandsetaJMeterSplitastringintoVevaluateavariableevaluateavariableevaluateanexpressionstoredinaparsepreviousresponseusingaregulargenerateUnicodecharvaluesfromalistofProcessstringscontainingJavaescapes(e.g.\n&EncodestringsusingHTML求的DOMAIN域,例如,做出輕微改動,就可以讓同一個測試腳本適配多個服務器。V(ar${N})}本中可以使用${BeanShell(vars.get("Var${N}")}。小 士將函數用于測試計劃(TestPlan)的設置時,會受到一些限制。此種情況下,JMeter線程會生效。如此一來,split()、regex()及變量賦值函數就都不能正常工作。函數threadNum()同樣不能正常工作,該函數在測試計劃層沒有意義。在測試計劃中,函數intSum、longSum、machineName、BeanShell、javaScript、jexl、random、time、propertyfunctions、logfunctions應如在UDV被處理前是不能使用的。小 士SELECTitemfromtablewhereSELECTitemfromtablewhere函數使用相同的辦法加以引用,但是依據慣例,函數名以“”開頭,以區別于變量名。${SCRIPT${SCRIPT變量的內容進行轉義,因為函數的調用先于變量被其值所替換。該方法適合于BSF或者BeanShell采樣器,這兩種采樣器可以用于測試JavaScript、Jexl和BeanShell腳本。函數可以引用變量及其他函數,例如${XPath(${P(xpathfile),${XPATH“xpathfile”作為文件名,變量XPATH的內容作為搜索表達式。小貼“,”或者“\”之前的反斜線會被移除。這個操作對于嵌套函數(士用戶可以使用logn()函數來報告變量或者函數的值。logn()函數可以在測試計劃中的任何地方被引用,前提條件是被報告的值已經被定義。另外,Java請求采樣器可以被用來產生一個DebugSampler,可以使用它來展示變量的值(如在查看結果樹中展示。小士貼士“Function如圖11-1所示。11-1函數助手(FunctionHelper)11-1regexFunction6個參數中,測試人值。例如,如果測試人員輸入“refName”作為第6個參數,那么測試人員可以使用:${refName}2個參數(Templateforthereplacementstring)的計算結果,這依參數如表11-2所示。11-21個參數是用于解析服務器響應數據的正則表達式。它會找到所有一定記得為其加上圓括號。例如,<ahref="(.*)">。這樣就會將鏈接的值存放到第一個匹配組合中(這里只有一個匹配組合)。又如,<input是是3個參數告訴JMeter使用第幾次匹配。測試人員的正則表達式可能會找到多個匹配項。對此,測試人員有4種選擇:否否否否11。計數器既可以被配置成針對目前計數器函數實例是獨立實現的(JMeter2.1.1及其以前版本,使用一個固定的線程變量11-3是引用它的值(JMeter2.1.1及其以前版本,這個參數是必需的)否函數threadNum只是簡單地返回當前線程的編號。線程編號不依賴于線程組,這就意味小這一函數不能用在任何配置元件中(如用戶定義的變量)貼士立線程運行的。另外在測試計劃(TestPlan)函數intSum可以被用來計算兩個或者更多整數值的合。參數如表11-4所示。11-4是是否否 JMeter2.3.1及其以前版本,要求必須有引用名參數。后續JMeter版本中,引用名是可士 士函數longSum可以被用來計算兩個或者更多長整型值的合。參數如表11-5所示。11-5是是否否CSVDataSetConfig,也能達到相同的目的,而且方法更簡單。但是該配置**ERR**參數如表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,函數machineName返回本機的主機名。參數如表11-7所示。11-7否函數Java_javaScriptJavaScript解釋器。JavaScript會作為腳本語言使用,因此測試人Rhinoscript小 士11-8待執行的JavaScriptMath.floor(Mathrandom()*(${maxRandom}+1)):在0和變量om}+1)):在變量minRandom和maxRandom之間的隨機數是否 貼 如,${javaScript('${sp}'.slice(7\,99999))},對7之后的逗號進行了轉義函數Random會返回指定最大值和最小值之間的隨機數。參數如表11-9所示。11-9是是否 JMeter1.9.1以前的版本僅支持從單個文件中讀取,JMeter1.9.1及其以后版本支持從多貼 用很重要,哪怕操作系統不區分大小寫,CSVRead(abc.txt,0)和CSVRead(aBc.txt,0)會引用不同貼 貼士11-10是=是COL1a${COL1b${CSVRead(random.txt,0)}COL2b${CSVRead(random.txt,1)}${ 貼 文件,請使用配置元件CSVDataSet或者StringFromFile函數propertyJMeter屬性的值。如果函數找不到屬性值,而又沒有提供默認${property(user.dir)}user.dir{ ${property(abcd,ABCD,atod)}:返回屬性abcd的值(如果屬性沒有定義,返回“atod”),并保存在變量ABCD中。11-11是否否函數_Pjmeter-Jgroup1.threads=7-${P(group1.loops)}group1.loops${P(hostname,)}hostname的值,如果沒有定義該屬性則返回值。(除非這些屬性在其他地方有定義。11-12是否函數log會記錄一條日志,并返回函數的輸入字符串。參數如表11-13所示。11-13是或者否否否OUTERRSystem.outSystem.err中。在這種${log(Message)}:寫入日志文件,形如“...threadNameMessage${log(Message,OUT)}${log(${VAR},,,VAR=)}:寫入日志文件,形如“...threadNameVAR=value”。14)logn函數logn會記錄一條日志,并返回空字符串。參數如表11-14所示。11-14是OUT,ERR,DEBUGINFO(默認),WARN否否OUTERRSystem.outSystem.err中。在這種函數BeanShellBeanShellBeanShellWeb站點:/。單個函數實例可以從多個線程調用。另外,該函數的execute()方法是同步的。:函數11-15一個BeanShell腳本(不是文件名是否${BeanShell(123*456)}56088小 請記得為文本字符串及代表文本字符串的JMeter變量添加必要的引號士函數split會通過分隔符來拆分傳遞給它的字符串,并返回原始的字符串。如果分隔符緊一個變量,會返回“ForEachsplit會刪除第一個不${前版本、VAR_1=a、VAR_2=?、VAR_3=c、VAR_4=?(null,JMeter2.1.1及其以前版本11-16是否否小
${XPath(/path/to/build.xml,參數如表11-17所示。11-17是是函數setPropertyJMeter屬性的值。函數的默認返回值是空字符串,因此該函數屬性對于JMeter是全局的,因此可以被用來在線程和線程組之間通信。參數如表11-18所示。11-18是是否函數time可以通過多種格式返回當前時間。參數如表11-19所示。11-19否否兩個網頁鏈接獲取更多關于JEXL的信息。11-20是否OUTSystem.outOUT.println("message")。JEXL可以基于它們來創建類,或者調用方法,例如: JMeter2.3.2以后的版本允許在表達式中包含多個聲明。JMeter2.3.2及其以前的版本只貼 V函數,函數參數如表11-21所示。11-21是函數customers11-22是函數name='${name}',那么通過${eval(${SQL})},就能執行“selectagefrombirthdayswhere11-23是函數charUnicode字符,另外還請參考下面unescape()函數。參數如表11-24所示。11-24Unicode字符編碼(是${char(0xC,0xA)}=${char(165)}=???參數如表11-25所示。11-25是${unescape(\r\n)}=${unescape(1\t2)}=函數“<Franais>11-26是函數escapeHtml用于轉義字符串中的字符(HTML實體HTML4.0實體。例如,"bread"&"butter"變為"bread"&"butter"。11-27是函數FileToString可以被用來讀取整個文件。每次對該函數的調用,都會讀取整個文件。**ERR**11-28是否否戶擁有對變量名的完整控制權。但是有些變量是JMeter內置的。例如,START變量(參見后續內容)JMeterJMeterJMeterJMeter請注意:START變量/JMeter啟動時間,而非測試的啟動時間。它們主要用詳解JMeterJMeter中包含范本匹配軟件ApacheJakartaOROJakarta網站上有一些關于它的文檔,例如asummaryofthepatternmatchingcharacters:OROMatcherUser'sguide,也許會有一些幫助。URL地址:/oro/docs/OROMatcher/indexhtml。表達式的文檔(perlrequick、perlretut、perlre、perlreref。包含(Contains)意味著正則表達式至少部分匹配目標,例如,'alphabet'ph.b.',在這一情況下,它等同于使用^和$封裝正則表達式,即'^al.*t$'。但是事情并不總是這樣。小
不同于假設測試人員期望匹配Web頁面的如下部分:name="file"value="readme.txt">并提取name="file"value="(.+?)">。() 小 士盡管上面的表達式可以達到目的,但是使用如下表達式更有效率:name="file"value="([^"]+)">,其中[^"]-意味著匹配任何東西(除了。在這種情況下,匹配引擎在找到第假設測試人員期望匹配Web頁面的如下部分:name="file"value="readme.txt">,并提取filename和="([^"]+)" 小 不要用//封裝正則表達式士+?^$:字符串或行的起始和結尾。注意,ORO不支持\Q和\E關鍵字。存在一個BUG,修改器不能放在正則表達式的末尾。盡管修改器在這里不生效。MatchExActcaseor(?i)ArBiTrARY(?-i)模式下,“”還匹配換行。詳解JMeterJMeter,測試人員可以跨越多臺低端計算機復制測試,這樣就可以模擬一個并通過它們收集測試數據,如圖11-3所示。這樣一來,就有了如下特性: 貼 1.4GHz~3GHzCPU、1GBJMeter100~300。但是器產生,網卡和交換機端口都可能產生瓶頸,所以一個JMeter客戶端線程數不應超過100。用大量的JMeter遠程服務器,可能會導致客戶端過載,或者網絡連接發生擁塞。11-3JMeterJMeter遠程測試的基本步驟:步驟1:配置節點有操作系統上使用相同的Java版本。JMeterperties或者試計劃之中,從而影響測試執行(例如,與其他遠程服務器發生交互。另外,不同的JMeterJMeterJMETER_HOME/bin/jmeter-server(UNIX)或者JMETER_HOME/bin/jmeter-server.bat(Windows)腳本。JMeterRMI端注冊。假設測試人員一定要單獨啟動RMI注冊,可以在遠程節點上定義JMeter屬性reote_hostsJMeterIPIP地址,以逗號作為請注意測試人員還可以使用-R命令行選項來指明將會使用的遠程服務器。這與使用-r-后就會退出。-Z標志也有同樣的效果,參見后面的內容。4(aJMeterGUIMS-Windows環境下運行“bin/jmeter.bat”腳本,UNIX環境下運行“bin/jmeter”腳本。測試人員會發現在運行(Run)菜單下,包含兩個子JMeterIPJMeter jmeter-n-tscript.jmx-jmeter-n-tscript.jmx-R開發者預期的范圍內)JMeter遠程服務器(2),其中包2(aJMeter2.3.1開始,JMeterRMI注冊,因此這里的內容不適用于普通情況。如果要采用歷史版本的操作方法,首先在JMeter遠程服務器上定義JMeter屬性JMeterRemoteMethodInvocation(RMI)作為遠程通信機制。因此,測試人員需要用rRmiregistry如下jar存在于測試人員的系統claspath中:端口1099。JMeter/RMI要求建立一個從客戶端到遠程服務器的連接。這就會用到測試人員所選擇的端JMeterSuseLinux上,下面這些技巧對測試人員可能會有幫助。默認的安裝可debuggingJMeter2.3.1版本開始,RMIJMeter遠程服務器JMeterjmeters-Dsun.rmi.loader.logLevel=verbose”(省略了-J。另外這些屬性還可以被定義在(Loopback`dirname$0`/jmeter-s`dirname$0`/jmeter$HOST-sJMeter2.1.1版本開始,jmeter-server腳本支持改變端口號。例如,假設測試人員希望使用端口號1664(可能因為1099端口已經被其他應用程序占用了。Windows(DOS窗口中C:\JMETER>SETC:\JMETER>JMETER-SERVER[other$SERVER_PORT=1664jmeter-server[otheroptions][N.B.useuppercasefortheenvironmentvariable]Rmiregistry,接著以遠程服務器模式啟動和JMeter客戶端產生很大的壓力。用戶可以通過設置一些屬性,來改變默認操作。(Mode(線程組(ThreadGroup)名稱和采樣標簽(SampleLabel)進行概要統計。積累的數據域包括:elapsedtime、latency、bytes、samplecount、errorcount,其他數據域將會被丟Customimplementation:將模式參數設置為測試人員的客戶化采樣發送器的類名。該類必須實現接口SampleSender,并且類的構造函數只有一個RemoteSampleListener型詳解JMeterJMeter有效線程數目。另外這還依賴于待測服務器的性能(JMeter的負擔,因為它響應請求的速度更快JMeter線程越多,統計得到的時間信息就越不準確。JMeter負擔越重,每一個線程等待CPU的時間就越在多臺機器上運行多個非GUIJMeter實例。11-5CSVDataSet(CSVDataSet)AccessLogSampler(在這里不能IncludeController,因為它會將指定文件中的所有測試元件直接添加到測試計劃中Mode到數據文件中,以CSVDataset方式讀取。這樣就能避免在測試運行階段浪費資源。試計劃中改變變量LOOPS的值。不存在,就使用默認值10。屬性“loops”接下來可以在JMeter命令行中定義:jmeter...-Jloops=12...。如果有很多屬性需要一起改變,那么解決辦法就是使用一組屬性文件。用戶可以使用命令行-q選項,以便將合適的屬性文件傳遞給JMeter。貼 這里沒有安全機制。任何人只要能連接上對應端口,就能執行任何BeanShell命令。這些貼士在上面的例子中,BeanShell900090019000將HTTP9001Telnet訪問。startup.bshBeanShell服務器處startup中定義了設置/JMeter及系統屬性的各種方法。測試人員可以在JMeter控制臺中看到如下內容:StartupscriptrunningStartupscriptcompletedHttpdstartedonport:9000Sessiondstartedonport:9001以屬性的形式定義的,形如${P(throughput)}BeanShell命令可以被用于改變測試://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測試元件都有獨立的解釋器備份(針對每個線程。如果測試元件被重復調用,例如,被放在循環之中,那么在多次調用間解釋器將被保留,除非選中了“Resetbsh.Interpreterbeforeeachcall”復選框,如圖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(初始化)腳本中。它們將會被一直保留下來,跨越測試元件的多次調用,除非使用到了reset選項。腳本同樣可以訪問JMeter變量,只需使用“vars”變量的get()和put()方法,例如,vars.get("HOST");vars.put("MSG","Successful");。get()put()方法只支持字符串類型的變量,getObject()putObject()方法可
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 法律案例說明課件
- 醫院醫療醫藥報告模板63
- 2025年商洛b2從業資格證模擬考試題目
- 小升初-周期問題
- 經濟管理年活動
- 幼兒園班主任職責
- 2025勞動合同與服務協議的區別何在
- 二零二五土地租賃終止協議合同書范例
- 極速小鎮建設內容
- 經費贊助協議書二零二五年
- 無人機導航與通信技術PPT完整全套教學課件
- 水利系統職稱考試水利專業技術人員職稱考試真題模擬匯編(共1067題)
- 全國城市一覽表-excel
- 綠色施工實施細則及評價標準
- 瘋狂動物城臺詞(配音片段)
- 扣繳個人所得稅報告表-(Excel版)
- A4版2023陜西省中考英語答題卡word版可以編輯
- 02R112 拱頂油罐圖集
- 高考臨界生輔導一生一策
- 寧波業主、業主大會、業主委員會指導規則
- MT/T 94-1996液壓支架立柱、千斤頂內徑及活塞桿外徑系列
評論
0/150
提交評論