1. 程式人生 > >jmeter函式和變數(二)

jmeter函式和變數(二)

__javaScript

函式__javaScript可以用來執行JavaScript程式碼片段(非Java),並返回結果值。JMeter的__javaScript函式會呼叫標準的javascript直譯器。JavaScript會作為指令碼語言使用,因此可以做相應的計算。
在指令碼中可以訪問如下一些變數。

  • Log:該函式的日誌記錄器。
  • Ctx:JmeterContext物件。
  • Vars:JmeterVariables物件。
  • threadName:字串包含當前執行緒名稱 。
  • sampler:當前取樣器物件(如果存在)。
  • sampleResult:前面的取樣結果物件(如果存在)。
  • props:JMeter屬性物件。

Rhinoscript允許通過它的包物件來訪問靜態方法。例如,使用者可以使用如下方法訪問JMeterContextService靜態方法:
Packages.org.apache.jmeter.threads.JMeterContextService.getTotalThreads()

JMeter不是一款瀏覽器,它不會執行從頁面下載的JavaScript。

Attribute Description Required
表示式 函式執行的JavaScript表示式例如:new Date()
變數 引用名,儲存函式返回值,以便複用

請記得為文字字串新增必要的引號。另外,如果表示式中有逗號,請確保對其轉義。例如,${__javaScript(‘${sp}’.slice(7,99999))},對7之後的逗號進行了轉義。

${__javaScript(new Date())}:返回一個日期
${__javaScript(new Date(),MYDATE)}:返回當前日期並存儲在變數MYDATE中
${__javaScript(Math.floor(Math.random()*(${maxRandom}+1)),MYRESULT)}:使用變數maxRandom,返回0-maxRandom之間的一個隨機數並存儲在MYRESULT中
$

{__javaScript(${minRandom}+Math.floor(Math.random()*(${maxRandom}-${minRandom}+1)),MYRESULT)}:使用maxRandom和minRandom變數,返回一個minRandom~maxRandom之間的一個隨機數並存儲在MYRESULT中
${__javaScript(“${VAR}”==”abcd”,MYRESULT)}:比較VAR變數值是否等於”abcd”的值,返回boolean值並存儲在MYRESULT中
這裡寫圖片描述

__Random

函式__Random會返回指定最大值和最小值之間的隨機數

Attribute Description Required
最小值 數值
最大值 一個比第一個大的數值
變數 引用名,儲存函式返回值,以便複用


這裡寫圖片描述

__RandomString

返回一個固定長度的隨機字串,在預設第二個引數時,即使指定了jmeter的字元編碼也可能會出現亂碼。

Attribute Description Required
Length 將要建立的隨機字串的長度
使用字元 建立隨機字串使用的字符集
變數 引用名,儲存函式值,壁邊複用


funRandomString

__RandomFromMultipleVars

函式返回基於指定的變數產生的隨機值
變數可以是簡單的變數也可以是表示式形式的複雜變數例如

  • Regular Expression Extractor
  • CSS/JQuery Extractor
  • JSON Extractor
  • XPath Assertion

多值變數是從表示式提取出來的,這樣會建立一個匹配總數的變數”varName_matchNr” 並且會為每個變數建立varName_n,其中n=1,2,3……等

Attribute Description Required
變數列表 使用|分割的變數名列表
變數 引用名,儲存函式值,壁邊複用


這裡寫圖片描述

__UUID

用來生成一個附機字串,格式類似8e9464d2-4561-453e-8005-ad0a44507640
這裡寫圖片描述

__CSVRead

函式__CSVRead會從CSV檔案讀取一個字串(請注意與StringFromFile 的區別)。
JMeter3.2支援從多個檔案中讀取(其實從JMeter 1.9.1+就開始支援)。
當對某個檔案進行第一次讀取時,檔案將被開啟並讀取到一個內部陣列中。如果在讀取過程中找到了空行,函式就認為到達檔案末尾。
後續所有對同一個檔名的引用,都使用相同的內部陣列。另外,檔名大小寫對函式呼叫很重要,哪怕作業系統不區分大小寫,CSVRead(abc.txt,0)和CSVRead(aBc.txt,0)會引用不同的內部陣列。
使用*ALIAS特性可以多次開啟同一個檔案,另外還能縮減檔名稱。
每一個執行緒都有獨立的內部指標指向檔案陣列中的當前行。當某個執行緒第一次引用檔案時,函式會為執行緒在陣列中分配下一個空閒行。如此一來,任何一個執行緒訪問的檔案行,都與其他執行緒不同[除非執行緒數大於陣列包含的行數]。

預設情況下,使用都好分割每一行的資料。如果希望在輸入的列中使用逗號,那麼需要換一個分隔符(通過設定屬性csvread.delimiter來實現),且該符號沒有在CSV檔案的任何列中出現。

Attribute Description Required
檔名 需要讀入的檔名(或者別名)
列序號 檔案中第幾個域(就是指定字元分割後第幾塊,從0編號開始)。0表示第一個域,1表示第二個域……。next表示跳過當前行,到檔案下一行。*ALIAS為開啟的檔案分配一個別名


cvs
上面的例子會從一行中讀取兩列,接著從下一行中讀取兩列。如果所有變數都在同一個前置處理器中(使用者引數上定義的),那麼行都是順序讀取的。否則,不同執行緒可能會讀取不同的行。

這一函式並不適合於讀取很大的檔案,因為整個檔案都會被儲存到記憶體之中。對於較大的檔案,請使用配置元件CSV Data Set或者StringFromFile 。

__property

函式__property會返回一個JMeter屬性的值。如果函式找不到屬性值,而又沒有提供預設值,則它會返回屬性的名稱。
例如,
${__property(user.dir)}:返回屬性user.dir的值。
${__property(user.dir,UDIR)}:返回屬性user.dir的值,並儲存在變數UDIR中。
${__property(abcd,ABCD,atod)}:返回屬性abcd的值 (如果屬性沒有定義,返回”atod”),並儲存在變數ABCD 中。
${__property(abcd,,atod)}:返回屬性abcd 的值(如果屬性沒有定義,返回”atod”),但是並不儲存函式的返回值。

這裡寫圖片描述

Attribute Description Required
屬性名 獲取屬性值、所需的屬性名
變數名 重用函式計算值的引用名
預設值 屬性未定義時的預設值


什麼?不知道jmeter屬性名如何檢視?
WorkBench右鍵—>Add—>Non Test Elements—>Property Display
這裡寫圖片描述

__P

類似__property,處理命令列中屬性,和__property不同,__P不會儲存屬性值,如果沒有指定預設值就假定為1
官網例子定義屬性值:

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。

在上面的例子中,第一個函式呼叫返回7,第二個函式呼叫返回1,而最後一個函式呼叫返回www.dummy.org(除非這些屬性在其他地方有定義)

Attribute Description Required
屬性名 獲取屬性值、所需的屬性名
預設值 屬性未定義時的預設值,未指定就假定是1