接上篇 jmeter函數(shù)和變量 http://blog.csdn.net/yue530tomtom/article/details/76651040
函數(shù)__javaScript可以用來執(zhí)行JavaScript代碼片段(非Java),并返回結(jié)果值。JMeter的__javaScript函數(shù)會調(diào)用標(biāo)準(zhǔn)的javascript解釋器。JavaScript會作為腳本語言使用,因此可以做相應(yīng)的計(jì)算。
在腳本中可以訪問如下一些變量。
Log:該函數(shù)的日志記錄器。
Ctx:JmeterContext對象。
Vars:JmeterVariables對象。
threadName:字符串包含當(dāng)前線程名稱 。
sampler:當(dāng)前采樣器對象(如果存在)。
sampleResult:前面的采樣結(jié)果對象(如果存在)。
props:JMeter屬性對象。
Rhinoscript允許通過它的包對象來訪問靜態(tài)方法。例如,用戶可以使用如下方法訪問JMeterContextService靜態(tài)方法:
Packages.org.apache.jmeter.threads.JMeterContextService.getTotalThreads()
JMeter不是一款瀏覽器,它不會執(zhí)行從頁面下載的JavaScript。
Attribute | Description | Required |
---|---|---|
表達(dá)式 | 函數(shù)執(zhí)行的JavaScript表達(dá)式例如:new Date() | 是 |
變量 | 引用名,保存函數(shù)返回值,以便復(fù)用 | 否 |
請記得為文本字符串添加必要的引號。另外,如果表達(dá)式中有逗號,請確保對其轉(zhuǎn)義。例如,${__javaScript(‘${sp}’.slice(7,99999))},對7之后的逗號進(jìn)行了轉(zhuǎn)義。
${__javaScript(new Date())}:返回一個(gè)日期
${__javaScript(new Date(),MYDATE)}:返回當(dāng)前日期并存儲在變量MYDATE中
${__javaScript(Math.floor(Math.random()*(${maxRandom}+1)),MYRESULT)}:使用變量maxRandom,返回0-maxRandom之間的一個(gè)隨機(jī)數(shù)并存儲在MYRESULT中
${__javaScript(${minRandom}+Math.floor(Math.random()*(${maxRandom}-${minRandom}+1)),MYRESULT)}:使用maxRandom和minRandom變量,返回一個(gè)minRandom~maxRandom之間的一個(gè)隨機(jī)數(shù)并存儲在MYRESULT中
${__javaScript(“${VAR}”==”abcd”,MYRESULT)}:比較VAR變量值是否等于”abcd”的值,返回boolean值并存儲在MYRESULT中
函數(shù)__Random會返回指定最大值和最小值之間的隨機(jī)數(shù)
Attribute | Description | Required |
---|---|---|
最小值 | 數(shù)值 | 是 |
最大值 | 一個(gè)比第一個(gè)大的數(shù)值 | 是 |
變量 | 引用名,保存函數(shù)返回值,以便復(fù)用 | 否 |
?
返回一個(gè)固定長度的隨機(jī)字符串,在缺省第二個(gè)參數(shù)時(shí),即使指定了jmeter的字符編碼也可能會出現(xiàn)亂碼。
Attribute | Description | Required |
---|---|---|
Length | 將要?jiǎng)?chuàng)建的隨機(jī)字符串的長度 | 是 |
使用字符 | 創(chuàng)建隨機(jī)字符串使用的字符集 | 否 |
變量 | 引用名,保存函數(shù)值,壁邊復(fù)用 | 否 |
?
函數(shù)返回基于指定的變量產(chǎn)生的隨機(jī)值
變量可以是簡單的變量也可以是表達(dá)式形式的復(fù)雜變量例如
Regular Expression Extractor
CSS/JQuery Extractor
JSON Extractor
XPath Assertion
多值變量是從表達(dá)式提取出來的,這樣會創(chuàng)建一個(gè)匹配總數(shù)的變量”varName_matchNr” 并且會為每個(gè)變量創(chuàng)建varName_n,其中n=1,2,3……等
Attribute | Description | Required |
---|---|---|
變量列表 | 使用|分割的變量名列表 | 是 |
變量 | 引用名,保存函數(shù)值,壁邊復(fù)用 | 否 |
?
用來生成一個(gè)附機(jī)字符串,格式類似8e9464d2-4561-453e-8005-ad0a44507640
函數(shù)__CSVRead會從CSV文件讀取一個(gè)字符串(請注意與StringFromFile 的區(qū)別)。
JMeter3.2支持從多個(gè)文件中讀取(其實(shí)從JMeter 1.9.1+就開始支持)。
當(dāng)對某個(gè)文件進(jìn)行第一次讀取時(shí),文件將被打開并讀取到一個(gè)內(nèi)部數(shù)組中。如果在讀取過程中找到了空行,函數(shù)就認(rèn)為到達(dá)文件末尾。
后續(xù)所有對同一個(gè)文件名的引用,都使用相同的內(nèi)部數(shù)組。另外,文件名大小寫對函數(shù)調(diào)用很重要,哪怕操作系統(tǒng)不區(qū)分大小寫,CSVRead(abc.txt,0)和CSVRead(aBc.txt,0)會引用不同的內(nèi)部數(shù)組。
使用*ALIAS特性可以多次打開同一個(gè)文件,另外還能縮減文件名稱。
每一個(gè)線程都有獨(dú)立的內(nèi)部指針指向文件數(shù)組中的當(dāng)前行。當(dāng)某個(gè)線程第一次引用文件時(shí),函數(shù)會為線程在數(shù)組中分配下一個(gè)空閑行。如此一來,任何一個(gè)線程訪問的文件行,都與其他線程不同[除非線程數(shù)大于數(shù)組包含的行數(shù)]。
默認(rèn)情況下,使用都好分割每一行的數(shù)據(jù)。如果希望在輸入的列中使用逗號,那么需要換一個(gè)分隔符(通過設(shè)置屬性csvread.delimiter來實(shí)現(xiàn)),且該符號沒有在CSV文件的任何列中出現(xiàn)。
Attribute | Description | Required |
---|---|---|
文件名 | 需要讀入的文件名(或者別名) | 是 |
列序號 | 文件中第幾個(gè)域(就是指定字符分割后第幾塊,從0編號開始)。0表示第一個(gè)域,1表示第二個(gè)域……。next表示跳過當(dāng)前行,到文件下一行。*ALIAS為打開的文件分配一個(gè)別名 | 是 |
?
這一函數(shù)并不適合于讀取很大的文件,因?yàn)檎麄€(gè)文件都會被存儲到內(nèi)存之中。對于較大的文件,請使用配置元件CSV Data Set或者StringFromFile 。
函數(shù)__property會返回一個(gè)JMeter屬性的值。如果函數(shù)找不到屬性值,而又沒有提供默認(rèn)值,則它會返回屬性的名稱。
例如,
${__property(user.dir)}:返回屬性user.dir的值。
${__property(user.dir,UDIR)}:返回屬性user.dir的值,并保存在變量UDIR中。
${__property(abcd,ABCD,atod)}:返回屬性abcd的值 (如果屬性沒有定義,返回”atod”),并保存在變量ABCD 中。
${__property(abcd,,atod)}:返回屬性abcd 的值(如果屬性沒有定義,返回”atod”),但是并不保存函數(shù)的返回值。
Attribute | Description | Required |
---|---|---|
屬性名 | 獲取屬性值、所需的屬性名 | 是 |
變量名 | 重用函數(shù)計(jì)算值的引用名 | 否 |
默認(rèn)值 | 屬性未定義時(shí)的默認(rèn)值 | 否 |
?
什么?不知道jmeter屬性名如何查看?
WorkBench右鍵—>Add—>Non Test Elements—>Property Display
類似__property,處理命令行中屬性,和__property不同,__P不會保存屬性值,如果沒有指定默認(rèn)值就假定為1
官網(wǎng)例子定義屬性值:
jmeter -Jgroup1.threads=7 -Jhostname1=www.realhost.edu
獲取值如下。
${__P(group1.threads)}:返回屬性group1.threads的值。
${__P(group1.loops)}:返回屬性group1.loops 的值。
${__P(hostname,www.dummy.org)}:返回屬性hostname的值,如果沒有定義該屬性則返回值www.dummy.org。
在上面的例子中,第一個(gè)函數(shù)調(diào)用返回7,第二個(gè)函數(shù)調(diào)用返回1,而最后一個(gè)函數(shù)調(diào)用返回www.dummy.org(除非這些屬性在其他地方有定義)
Attribute | Description | Required |
---|---|---|
屬性名 | 獲取屬性值、所需的屬性名 | 是 |
默認(rèn)值 | 屬性未定義時(shí)的默認(rèn)值,未指定就假定是1 | 否 |