概述對(duì)jmeter函數(shù)進(jìn)行一次全面復(fù)習(xí),依據(jù)是官網(wǎng)的文檔版本3.2。本來(lái)想一篇寫完的,中間做項(xiàng)目和一些雜事拖了2個(gè)禮拜,再回來(lái)寫的時(shí)候發(fā)現(xiàn)太長(zhǎng)了~還是分開(kāi)寫比較妥當(dāng)。先放出一部分吧。 函數(shù)和變量JMeter函數(shù)是一種特殊的值,可以在測(cè)試樹(shù)中填充任何采樣器或其他元素的字段。函數(shù)調(diào)用如下: ${__functionName(var1,var2,var3)}
“__functionName”與具體的函數(shù)名匹配。圓括號(hào)內(nèi)是傳遞給函數(shù)的參數(shù),例如${__time(YMD)},實(shí)際的參數(shù)因函數(shù)而異。不需要參數(shù)的函數(shù)可以去掉括號(hào),例如${__threadNum}。 如果一個(gè)函數(shù)參數(shù)包含一個(gè)逗號(hào),那么一定要用”\”來(lái)轉(zhuǎn)義,否則JMeter將把它作為一個(gè)參數(shù)分隔符。 例如: ${__time(EEE\, d MMM yyyy)}
如果逗號(hào)沒(méi)有轉(zhuǎn)義,將會(huì)有異常拋出 ${__javaScript(Math.max(2,5))}
ERROR - jmeter.functions.JavaScript: Error processing Javascript: [Math.max(2]
org.mozilla.javascript.EvaluatorException: missing ) after argument list (<cmd>#1)
這是因?yàn)樽址盡ath.max(2,5)”被看作是__javascript函數(shù)的兩個(gè)參數(shù):”Math.max(2” 和 “5)” 變量被引用如下: ${VARIABLE}
如果引用一個(gè)未定義的函數(shù)或變量,JMeter不會(huì)報(bào)告/記錄一個(gè)錯(cuò)誤——引用沒(méi)有改變。例如,如果沒(méi)有定義變量UNDEF,那么${UNDEF}的值就是${UNDEF}。變量,函數(shù)(或者屬性)都是區(qū)分大小寫的。在使用jmeter變量之前,JMeter會(huì)刪除變量前后的空格,例如${__Random(1,63, LOTTERY )}將會(huì)使用變量’LOTTERY’而不是’ LOTTERY ‘(這個(gè)前后各有一個(gè)空格)。 屬性與變量不同。變量是線程的局部變量;屬性在所有線程中都是通用的,并且需要使用__P或__property函數(shù)來(lái)引用。 當(dāng)在一個(gè)windows路徑的變量之前使用”\”,例如C:\test\${test},確保轉(zhuǎn)義,否則JMeter將不會(huì)解釋變量,例如:C:\\test\\${test}。或者,只使用/替代路徑分隔符-例如C:/test/$test-Windows jvms將根據(jù)需要轉(zhuǎn)換分隔符。 摘自官網(wǎng): Type of function | Name | Comment | Since |
---|
Information | threadNum | get thread number | 1.X | Information | samplerName | get the sampler name (label) | 2.5 | Information | machineIP | get the local machine IP address | 2.6 | Information | machineName | get the local machine name | 1.X | Information | time | return current time in various formats | 2.2 | Information | log | log (or display) a message (and return the value) | 2.2 | Information | logn | log (or display) a message (empty return value) | 2.2 | Input | StringFromFile | read a line from a file | 1.9 | Input | FileToString | read an entire file | 2.4 | Input | CSVRead | read from CSV delimited file | 1.9 | Input | XPath | Use an XPath expression to read from a file | 2.0.3 | Calculation | counter | generate an incrementing number | 1.X | Calculation | intSum | add int numbers | 1.8.1 | Calculation | longSum | add long numbers | 2.3.2 | Calculation | Random | generate a random number | 1.9 | Calculation | RandomFromMultipleVars | extracts an element from the values of a set of variables separated by |
| Calculation | RandomString | generate a random string | 2.6 | Calculation | UUID | generate a random type 4 UUID | 2.9 | Scripting | groovy | run a Groovy script | 3.1 | Scripting | BeanShell | run a BeanShell script | 1.X | Scripting | javaScript | process JavaScript (Nashorn) | 1.9 | Scripting | jexl2 | evaluate a Commons Jexl2 expression | jexl2(2.1.1) | Scripting | jexl3 | evaluate a Commons Jexl3 expression | jexl3 (3.0) | Properties | property | read a property | 2 | Properties | P | read a property (shorthand method) | 2 | Properties | setProperty | set a JMeter property | 2.1 | Variables | split | Split a string into variables | 2.0.2 | Variables | V | evaluate a variable name | 2.3RC3 | Variables | eval | evaluate a variable expression | 2.3.1 | Variables | evalVar | evaluate an expression stored in a variable | 2.3.1 | String | regexFunction | parse previous response using a regular expression | 1.X | String | escapeOroRegexpChars | quote meta chars used by ORO regular expression | 2.9 | String | char | generate Unicode char values from a list of numbers | 2.3.3 | String | unescape | Process strings containing Java escapes (e.g. \n & \t) | 2.3.3 | String | unescapeHtml | Decode HTML-encoded strings | 2.3.3 | String | escapeHtml | Encode strings using HTML encoding | 2.3.3 | String | escapeXml | Encode strings using XMl encoding | 3.2 | String | urldecode | Decode a application/x-www-form-urlencoded string | 2.1 | String | urlencode | Encode a string to a application/x-www-form-urlencoded string | 2.1 | String | TestPlanName | Return name of current test plan | 2.6 |
函數(shù)能做什么有兩種函數(shù):用戶定義的靜態(tài)值(或變量)和內(nèi)置函數(shù)。 用戶定義的靜態(tài)值允許用戶定義變量,當(dāng)測(cè)試樹(shù)被編譯并提交運(yùn)行時(shí),這些變量將被替換為靜態(tài)值。 替換在測(cè)試運(yùn)行第一次開(kāi)始時(shí)發(fā)生。用于替換所有HTTP請(qǐng)求的域字段,例如,將同一個(gè)測(cè)試用例測(cè)試不同服務(wù)器的將變成一個(gè)簡(jiǎn)單的問(wèn)題。 注意:變量不能被嵌套,例如${Var${N}}將不起作用. __V (variable)函數(shù)可以用來(lái)做變量替換: ${__V(Var${N})}. 你也可以使用 ${__BeanShell(vars.get(“Var${N}”)}. 這種類型的替換在沒(méi)有函數(shù)的情況下是可能的,但是不那么方便,也不那么直觀。它要求用戶創(chuàng)建默認(rèn)的配置元素,這些元素將填充Samplers的空白值。變量允許只替換任何給定值的一部分,而不只是填充空白值。 有了內(nèi)置函數(shù),用戶可以在運(yùn)行時(shí)根據(jù)之前的響應(yīng)數(shù)據(jù)計(jì)算新值,以及該函數(shù)所在的線程、耗時(shí)和許多其他信息。在整個(gè)測(cè)試過(guò)程中,這些值會(huì)在每個(gè)請(qǐng)求后刷新。 函數(shù)是線程共享的,在測(cè)試中每次函數(shù)調(diào)用由函數(shù)的不同實(shí)例處理
函數(shù)和變量在哪里使用函數(shù)和變量可以寫入任何測(cè)試組件的任何字段(除了測(cè)試計(jì)劃之外)。有些字段不允許隨機(jī)字符串,因?yàn)樗鼈兤谕麛?shù)字,因此不會(huì)接受一個(gè)函數(shù)。但是,大多數(shù)字段都允許函數(shù)。 在測(cè)試計(jì)劃中使用的函數(shù)有一些限制。在處理函數(shù)時(shí),JMeter線程變量將不會(huì)被完全設(shè)置,因此變量名作為一個(gè)參數(shù)傳入,不會(huì)被設(shè)置,變量引用也不會(huì)起作用,因此split()和regex()和變量評(píng)估函數(shù)將不會(huì)起作用。threadNum()函數(shù)不會(huì)起作用(在測(cè)試計(jì)劃級(jí)別上沒(méi)有意義)。以下功能應(yīng)該在測(cè)試計(jì)劃中起作用: intSum longSum machineName BeanShell groovy javaScript jexl2/jexl3 random time property functions log functions
配置元素由一個(gè)單獨(dú)的線程處理。因此,諸如__threadNum這樣的函數(shù)在諸如用戶定義的變量之類的元素中不能正常工作。還要注意,在UDV元素中定義的變量在處理元素之前是不可用的。 在SQL中使用變量/函數(shù)引用是,記得字符串包含必要的引號(hào) SELECT item from table where name=’${VAR}’
而不是 SELECT item from table where name=${VAR}
(除非字符串本身包含引號(hào)) 如何引用變量和函數(shù)在測(cè)試元素中引用變量是通過(guò) ‘${}’將變量包含起來(lái) 如${var}。 函數(shù)以相同的方式引用,但按照約定,函數(shù)名以”__”開(kāi)頭,避免與用戶值名稱沖突,一些函數(shù)使具有參數(shù),這些函數(shù)參數(shù)以逗號(hào)分隔。如果函數(shù)不帶參數(shù),則可以省略括號(hào)。若參數(shù)值本身包含逗號(hào),應(yīng)該在必要時(shí)轉(zhuǎn)義: “\,”,這適用于腳本函數(shù)——Javascript、Beanshell、Jexl、groovy在腳本方法調(diào)用中,需要避免任何可能需要的逗號(hào)。 ${__BeanShell(vars.put("name"\,"value"))}
另外一種方法可以將腳本定義成一個(gè)變量: SCRIPT vars.put("name","value")
腳本可以引用如下:
${__BeanShell(${SCRIPT})}
這里不需要轉(zhuǎn)義SCRIPT變量中的逗號(hào),因?yàn)楹瘮?shù)調(diào)用在變量替換為它的值之前被解析。這與JSR223或BeanShell的采樣器能夠很好的配合,因?yàn)檫@些可以用來(lái)測(cè)試Javascript、Jexl和BeanShell腳本。 函數(shù)可以引用變量和其他函數(shù),例如${__XPath(${__P(xpath.file),${XPATH})} 將使用屬性”xpath.file”作為文件名,變量XPATH要搜索的表達(dá)式的內(nèi)容。 JMeter提供了一個(gè)工具來(lái)幫助構(gòu)造函數(shù)調(diào)用,用于各種內(nèi)建函數(shù),然后就可以復(fù)制粘貼了。 它不會(huì)自動(dòng)轉(zhuǎn)義,因?yàn)楹瘮?shù)可以是其他函數(shù)的參數(shù),應(yīng)該只轉(zhuǎn)義想要的值。 If a string contains a backslash(‘\’) and also contains a function or variable reference, the backslash will be removed if it appears before ‘$’ or ‘,’ or ‘\’. This behaviour is necessary to allow for nested functions that include commas or the string ${. Backslashes before ‘$’ or ‘,’ or ‘\’ are not removed if the string does not contain a function or variable reference.
變量或函數(shù)的值可以使用__logn()函數(shù)進(jìn)行報(bào)告。在定義變量之后,__logn()函數(shù)引用可以在測(cè)試計(jì)劃的任何地方使用?;蛘?,可以使用Java請(qǐng)求采樣器可以創(chuàng)建包含變量引用的樣例;輸出將顯示在適當(dāng)?shù)膫陕?tīng)器中。 注意,在樹(shù)視圖監(jiān)聽(tīng)器中有一個(gè)可以用來(lái)顯示變量值的調(diào)試采樣器(Debug Sampler)。
如果定義一個(gè)用戶定義的靜態(tài)變量,其名稱與內(nèi)置函數(shù)相同,那么您的靜態(tài)變量將會(huì)覆蓋內(nèi)置函數(shù)。
函數(shù)幫助對(duì)話框函數(shù)幫助對(duì)話框可以從Jmeter的菜單中調(diào)出
使用函數(shù)幫助器,您可以從下拉中選擇一個(gè)函數(shù),并為其參數(shù)指定值。表中的左列提供了對(duì)該參數(shù)的簡(jiǎn)要描述,而右邊的列是您在該參數(shù)的值中寫入的位置。不同的函數(shù)有不同的參數(shù)。 一旦您完成了這個(gè)操作,點(diǎn)擊“generate”按鈕,就會(huì)生成適當(dāng)?shù)淖址?,以便您可以在您喜歡的地方復(fù)制粘貼到您的測(cè)試計(jì)劃中。
 函數(shù)__regexFunction函數(shù)用于使用任何正則表達(dá)式(由用戶提供)解析以前的響應(yīng)(或變量的值)。函數(shù)返回帶有變量值的模板字符串。 __regexFunction還可以存儲(chǔ)起來(lái),以便供后續(xù)使用。在第六個(gè)參數(shù)中,可以指定一個(gè)引用名稱。在執(zhí)行該函數(shù)之后,可以在稍后使用用戶定義值的語(yǔ)法檢索相同的值。 例如,如果您輸入”refName”作為第六個(gè)參數(shù),您將能夠使用: ${refName}來(lái)引用第2個(gè)參數(shù)(替換字符串模板)的計(jì)算結(jié)果,這依賴于函數(shù)的解析結(jié)果。 ${refName_g0}來(lái)引用函數(shù)解析后發(fā)現(xiàn)的所有匹配結(jié)果。 ${refName_g1}來(lái)引用函數(shù)解析后發(fā)現(xiàn)的第一個(gè)匹配組合。 ${refName_g#}來(lái)引用函數(shù)解析后發(fā)現(xiàn)的第n個(gè)匹配組合。 ${refName_matchNr}來(lái)引用函數(shù)總共發(fā)現(xiàn)的匹配組合數(shù)目
Attribute | Description | Required |
---|
第1個(gè)參數(shù) | 第1個(gè)參數(shù)是用于解析服務(wù)器響應(yīng)數(shù)據(jù)的正則表達(dá)式。它會(huì)找到所有匹配項(xiàng)。如果希望將表達(dá)式中的某部分應(yīng)用在模板字符串中,一定記得為其加上圓括號(hào)。例如,<a href=”(.*)”>。這樣就會(huì)將鏈接的值存放到第一個(gè)匹配組合中(這里只有一個(gè)匹配組合)。又如,。在這個(gè)例子中,鏈接的name作為第一個(gè)匹配組合,鏈接的value會(huì)作為第二個(gè)匹配組合。這些組合可以用在的模板字符串中 | 是 | 第2個(gè)參數(shù) | 這是一個(gè)模板字符串,函數(shù)會(huì)動(dòng)態(tài)填寫字符串的部分內(nèi)容。要在字符串中引用正則表達(dá)式捕獲的匹配組合,請(qǐng)使用語(yǔ)法:$[group_number]$。例如$1$或者 $2$。的模板可以是任何字符串 | 是 | 第3個(gè)參數(shù) | 第3個(gè)參數(shù)告訴JMeter使用第幾次匹配。正則表達(dá)式可能會(huì)找到多個(gè)匹配項(xiàng)。對(duì)此,有4種選擇:1)整數(shù),直接告訴JMeter使用第幾個(gè)匹配項(xiàng)?!?”對(duì)應(yīng)第一個(gè)匹配,”2”對(duì)應(yīng)第二個(gè)匹配,以此類推2)RAND,告訴JMeter隨機(jī)選擇一個(gè)匹配項(xiàng)3)ALL,告訴JMeter使用所有匹配項(xiàng),為每一個(gè)匹配項(xiàng)創(chuàng)建一個(gè)模板字符串,并將它們連接在一起4)浮點(diǎn)值0到1之間,根據(jù)公式(找到的總匹配數(shù)目*指定浮點(diǎn)值)計(jì)算使用第幾個(gè)匹配項(xiàng),計(jì)算值向最近的整數(shù)取整 | 否,默認(rèn)值為1 | 第4個(gè)參數(shù) | 如果在上一個(gè)參數(shù)中選擇了”ALL”,那么這第4個(gè)參數(shù)會(huì)被插入到重復(fù)的模板值之間,就是說(shuō)有多個(gè)地方匹配模版,這多個(gè)匹配之間用該參數(shù)的值進(jìn)行分割 | 否 | 第5個(gè)參數(shù) | 如果沒(méi)有找到匹配項(xiàng)返回的默認(rèn)值 | 否 | 第6個(gè)參數(shù) | 重用函數(shù)解析值的引用名。存儲(chǔ)${refName}和${refName_g#} “#”是正則表達(dá)式匹配到組的數(shù)量(“0”可以使用,是全部匹配) | 否 | 第7個(gè)參數(shù) | 輸入變量名稱。如果指定了這一參數(shù),那么該變量的值就會(huì)作為函數(shù)的輸入,而不再使用前面的采樣結(jié)果作為搜索對(duì)象 | 否 |
舉個(gè)栗子!還是以百度的首頁(yè)搜索為例。一共有兩個(gè)斷言,見(jiàn)截圖。
 
第一個(gè)斷言正則表達(dá)式$1$ $2$返回結(jié)果為kw wd;第二個(gè)斷言直接引用refName_g0(在第一個(gè)斷言中使用的第六個(gè)參數(shù)),結(jié)果為<input id=kw name=wd class=s_ipt value maxlength=255
 因?yàn)樵谏厦娴睦又姓齽t表達(dá)式中并沒(méi)有出現(xiàn)多個(gè)匹配的模版所以設(shè)置的第四個(gè)參數(shù)tmp沒(méi)有起作用,下面做個(gè)演示只是用http關(guān)鍵字進(jìn)行匹配,并制定第四個(gè)參數(shù)為SSS
 是不是第四個(gè)參數(shù)已經(jīng)生效了 現(xiàn)在演示一下正則表達(dá)式中應(yīng)用自定義變量
 __counter這個(gè)函數(shù)是一個(gè)計(jì)數(shù)器,用于統(tǒng)計(jì)函數(shù)的使用次數(shù),從1開(kāi)始每次加1。計(jì)數(shù)器既可以被配置成針對(duì)每個(gè)虛擬用戶是獨(dú)立的,也可以被配置成所有虛擬用戶公用的。如果每個(gè)虛擬用戶的計(jì)數(shù)器是獨(dú)立增長(zhǎng)的,那么通常被用于記錄測(cè)試計(jì)劃運(yùn)行了多少遍。全局計(jì)數(shù)器通常被用于記錄發(fā)送了多少次請(qǐng)求。計(jì)數(shù)器使用一個(gè)整數(shù)值來(lái)記錄,允許的最大值為2,147,483,647。 計(jì)數(shù)器函數(shù)實(shí)例是完全獨(dú)立的。全局計(jì)數(shù)器 “FALSE”是由每個(gè)計(jì)數(shù)器實(shí)例單獨(dú)維護(hù)的。 在同一個(gè)迭代中,多個(gè)計(jì)數(shù)器函數(shù)(__counter)調(diào)用不會(huì)進(jìn)一步增加值。如果想要為每個(gè)示例增加一個(gè)增量,請(qǐng)?jiān)陬A(yù)處理程序中使用該函數(shù),例如用戶參數(shù)。 Attribute | Description | Required |
---|
第1個(gè)參數(shù) | True,如果希望每個(gè)虛擬用戶的計(jì)數(shù)器保持獨(dú)立,與其他用戶的計(jì)數(shù)器相區(qū)別。false,全局計(jì)數(shù)器 | 是 | 第2個(gè)參數(shù) | 重用計(jì)數(shù)器函數(shù)創(chuàng)建值的引用名??梢赃@樣引用計(jì)數(shù)器的值:${refName}。這樣就可以創(chuàng)建一個(gè)計(jì)數(shù)器后,在多個(gè)地方引 | 否 |
格式:${__counter(FALSE,test)} 我們將”__counter”函數(shù)生成的參數(shù)復(fù)制到某個(gè)參數(shù)下面(一般使用的時(shí)候會(huì)放在對(duì)應(yīng)的取樣器中,見(jiàn)__threadNum例子),如果為TRUE格式,則每個(gè)線程各自統(tǒng)計(jì),最大數(shù)為循環(huán)數(shù),如果為FALSE,則所有線程一起統(tǒng)計(jì),最大數(shù)為線程數(shù)乘以循環(huán)數(shù) 下面是設(shè)置了10個(gè)線程循環(huán)5次執(zhí)行的結(jié)果:自定義的mycountervar在持續(xù)增加~~
 當(dāng)然也可以使用線程組的配置元件–計(jì)數(shù)器來(lái)實(shí)現(xiàn)計(jì)數(shù)
 __threadNum函數(shù)__threadNum只是簡(jiǎn)單地返回當(dāng)前線程的編號(hào)。線程編號(hào)不依賴于線程組,這就意味著從函數(shù)的角度看來(lái),某個(gè)線程組的線程#1和另一個(gè)線程組的線程#1是沒(méi)有區(qū)別的。另外,該函數(shù)沒(méi)有參數(shù)。 格式:${__threadNum} 返回一個(gè)1到線程組中配置的運(yùn)行線程的最大數(shù)之間的一個(gè)數(shù)字 這一函數(shù)不能用在任何配置元件中(如用戶定義的變量),原因在于配置元件是由一個(gè)獨(dú)立線程運(yùn)行的。另外在測(cè)試計(jì)劃(Test Plan)中使用也是沒(méi)有意義的。 
__intSum__intSum函數(shù)分別用來(lái)進(jìn)行整型。這兩個(gè)函數(shù)均為可變參數(shù)列表的函數(shù),可用來(lái)進(jìn)行任意個(gè)整型數(shù)據(jù)的加法運(yùn)算。 用于計(jì)算多個(gè)整數(shù)的和,可以是計(jì)算正整數(shù)和負(fù)整數(shù)的和,它有N個(gè)參數(shù),最少有3個(gè)參數(shù),最多不限。最后一個(gè)參數(shù)是函數(shù)名稱,前面的其它參 數(shù)是要求和的整數(shù)。這個(gè)函數(shù)在函數(shù)對(duì)話框中只顯示3個(gè)參數(shù),如果要計(jì)算多個(gè)整數(shù),可以通過(guò)添加參數(shù)實(shí)現(xiàn),不過(guò)最后一個(gè)參數(shù)一定要是函數(shù)名稱。再添加的參數(shù) 會(huì)在函數(shù)名稱后面,這個(gè)時(shí)候,需要我們手動(dòng)將函數(shù)名稱參數(shù)放到最后一個(gè)。 Attribute | Description | Required |
---|
第1個(gè)參數(shù) | 第1個(gè)整數(shù)值 | 是 | 第2個(gè)參數(shù) | 第2個(gè)整數(shù)值 | 是 | … | … | … | 第n個(gè)參數(shù) | 第n個(gè)整數(shù)值 | 否 | 最后一個(gè)參數(shù) | 函數(shù)計(jì)算值的引用名。如果用戶指定了這一參數(shù),那么引用名中必須包含一個(gè)非數(shù)字字母,否則它會(huì)被當(dāng)成另一個(gè)整數(shù)值,而被函數(shù)用于計(jì)算 | 否 |
? 在HTTP請(qǐng)求中設(shè)置函數(shù),經(jīng)過(guò)調(diào)試查看保存計(jì)算的結(jié)果
 __longSum__longSum與__intSum函數(shù)分別用來(lái)進(jìn)行長(zhǎng)整型和整型數(shù)據(jù)的加法運(yùn)算,幾乎一樣 不再做介紹 見(jiàn)__intSum __StringFromFile函數(shù)__StringFromFile可以被用來(lái)從文本文件中讀取字符串。這對(duì)于需要大量可變數(shù)據(jù)的測(cè)試很有用。例如,當(dāng)測(cè)試一個(gè)銀行應(yīng)用系統(tǒng)時(shí),可能需要100條甚至1000條賬戶信息。 使用配置元件CSV Data Set Config ,也能達(dá)到相同的目的,而且方法更簡(jiǎn)單。但是該配置元件目前不支持多輸入文件。 每次調(diào)用函數(shù),都會(huì)從文件中讀取下一行。當(dāng)?shù)竭_(dá)文件末尾時(shí),函數(shù)又會(huì)從文件開(kāi)始處重新讀取,直到最大循環(huán)次數(shù)。如果在一個(gè)測(cè)試腳本中對(duì)該函數(shù)有多次引用,那么每一次引用都會(huì)獨(dú)立打開(kāi)文件,即使文件名是相同的(如果函數(shù)讀取的值,在腳本其他地方也有使用,那么就需要為每一次函數(shù)調(diào)用指定不同的變量名)。 函數(shù)實(shí)例是在線程之間共享的,當(dāng)線程需要輸入時(shí)打開(kāi)或重新打開(kāi)文件,因此使用threadNumber作為文件名的一部分將導(dǎo)致不可預(yù)測(cè)的行為。
如果在打開(kāi)或者讀取文件時(shí)發(fā)生錯(cuò)誤,那么函數(shù)就會(huì)返回字符串”**ERR**”。 Attribute | Description | Required |
---|
文件名 | 文件名(可以使用相對(duì)于JMeter啟動(dòng)目錄的相對(duì)路徑)。如果要在文件名中使用可選的序列號(hào),那么文件名必須適合轉(zhuǎn)成十進(jìn)制格式。 | 是 | 變量名 | 一個(gè)引用名(refName),目的是復(fù)用這一函數(shù)創(chuàng)建的值??梢允褂谜Z(yǔ)法${refName}來(lái)引用函數(shù)創(chuàng)建的值。默認(rèn)值為”StringFromFile_” | 否 | 初始序列 | 號(hào)初始序列號(hào)(如果省略這一參數(shù),終止序列號(hào)會(huì)作為一個(gè)循環(huán)計(jì)數(shù)器) | 否 | 終止序列 | 號(hào)終止序列號(hào)(如果省略這一參數(shù),序列號(hào)會(huì)一直增加下去,不會(huì)受到限 制) | 否 |
? 當(dāng)打開(kāi)或者重新打開(kāi)文件時(shí),文件名參數(shù)將會(huì)被解析。 每次執(zhí)行函數(shù)時(shí),引用名參數(shù)(如果支持)將會(huì)被解析。 使用序列號(hào): 當(dāng)使用可選的序列號(hào)時(shí),文件名需要使用格式字符串Java.text.DecimalFormat。當(dāng)前的序列號(hào)會(huì)作為唯一的參數(shù)。如果不指明可選的初始序列號(hào),就使用文件名作為起始值。一些有用的格式序列如下: #:插入數(shù)字,數(shù)字前面不能有0,也不包含空格。 000:插入數(shù)字,包含3個(gè)數(shù)字組合,位數(shù)不足使用0在左側(cè)補(bǔ)齊指定的位數(shù),超過(guò)位數(shù)的按實(shí)際位置輸出。 例如: 寫法 | 解釋 |
---|
pin#’.’dat | pin1.dat, … pin9.dat, pin10.dat, … pin9999.dat | pin000’.’dat | pin001.dat … pin099.dat … pin999.dat … pin9999.dat | pin’.’dat# | pin.dat1, … pin.dat9 … pin.dat999 |
? 如果不希望某個(gè)格式字符被翻譯,需要為它加上單引號(hào)。注意”.”是格式字符,必須被單引號(hào)所包含。 如果路徑名不包含任何特殊的格式化字符,那么當(dāng)前的序列號(hào)將被追加到名稱中,否則將根據(jù)格式化指令插入數(shù)字。 如果省略了初始序列號(hào),且指定了終止序列號(hào),則終止序列號(hào)理解為循環(huán)的次數(shù),文件將被重復(fù)執(zhí)行指定次數(shù),在這種情況下文件名將不被格式化轉(zhuǎn)義,直接匹配。例如: ${_StringFromFile(PIN#'.'DAT,,1,2)}:讀取 PIN1.DAT, PIN2.DAT。
${_StringFromFile(PIN.DAT,,,2)}:讀取 PIN.DAT 兩次。
注意: “.”在PIN.DAT并沒(méi)有使用引號(hào)引著,在這個(gè)用例中起始序列號(hào)省略,所以文件名精確匹配

__machineName函數(shù)__machineName返回本機(jī)的主機(jī)名。使用java方法InetAddress.getLocalHost()傳給getHostName()。只有一個(gè)參數(shù):引用名,非必須 Attribute | Description | Required |
---|
引用名 | 該函數(shù)返回值存儲(chǔ)起來(lái),以便復(fù)用 | 否 |
?
 __machineIP函數(shù)__machineIP返回本機(jī)的主機(jī)IP。使用java方法InetAddress.getLocalHost()傳給getHostName()。只有一個(gè)參數(shù):引用名,非必須 Attribute | Description | Required |
---|
引用名 | 該函數(shù)返回值存儲(chǔ)起來(lái),以便復(fù)用 | 否 |

|