_cvsRead函數是從外部讀取參數,csvRead函數能夠從一個文件中讀取多個參數。 java
步驟:web
一、先新建一個文件,例如c.txt,裏面的數據存放爲正則表達式
web@qq.com,111111apache
col@qq.com,111111瀏覽器
爲使用的用戶名和密碼,也能夠加其餘參數,用逗號隔開,每一列表示一種參數,每一行則表示一組參數網絡
二、在jmeter中的【選項】中選擇【函數助手對話框】,將會彈出以下對話框:多線程
其中:dom
CSV file to get values from | *alias:要讀取的文件路徑,爲絕對路徑 函數
CSV文件列號| next| *alias:從第幾列開始讀取,注意第一列是0
如上圖所示,咱們讀取的是c.txt裏面的第一列用戶名(若是要讀取第二列的密碼,只需將0改爲1便可,日後類推),點擊【生成】按鈕便可生成函數,咱們使用時即拷貝生成的函數字符串:${__CSVRead(E:\c.txt,0)}
三、使用以下圖所示:
其中的值即爲咱們的生成的函數(${__CSVRead(E:\c.txt,0)}),jmeter執行時,若是是多線程,則從c.txt中第一行開始讀取,若是設置的線程數大於c.txt中的行數,將會循環讀取數據,一般該行數可用於參數化。
使用過程當中的問題及解決方法:
在使用_cvsRead函數時,第一行的內容前面會出現一串字符,以下:
這個時候,只要將txt文件的格式保存爲ANSI/ASCII便可。
_Random函數是從某數據段隨機讀取數據替換參數,當須要添加多條數據記錄且某些字段須要惟一性時使用,使用該函數隨機生成的數據是數字。
步驟:
一、在jmeter中的【選項】中選擇【函數助手對話框】,將會彈出以下對話框:選擇_Random
如上圖:
一個範圍內的最小值:即咱們所要取的隨機數的最小值,上述設置爲1,生成的隨機數將不會小於1
一個範圍內容許的最大值:即咱們所要取的隨機數的最大值,上述設置爲100,生成的隨機數將不能超過100
Name of variable in which to store the result(optional)爲函數名稱名稱:這裏咱們設置爲random,即用於存儲在測試計劃中其餘的方式使用的值
點擊【生成】按鈕便可獲得咱們所須要的函數:${__Random(1,100,random)},而後將函數複製到須要用到隨機數的地方,咱們就可使用啦。
注意:當咱們設置的線程數超過隨機數範圍時,隨機數將會重複生成
二、使用以下圖所示:
將生成的函數填充進值框中便可
_StringFromFile函數是從一個文件中讀取一個字符串,用來實現參數化,若是讀取或者打開這個文件發生錯誤時,將會返回「**ERR** 」字符串
步驟:
一、在jmeter中的【選項】中選擇【函數助手對話框】,將會彈出以下對話框:選擇_StringFromFile
輸入文件的全路徑:輸入讀取文件的絕對路徑
Name of variable in which to store the result:函數名稱(只是用來存儲變量的名稱,不能夠${名稱}使用)
Start file sequence number:初始序列號
Final file sequence number:結束序列號
上圖所示表示:若是目錄下面有test2.dat、test3.dat、test4.dat,則按順序讀取這三個文件中的每行值,其中初始序列號表示文件後面的開始序號,若是有test1.dat文件將不會被讀取,結束序列號類推(至於爲何會有這個看起來彷佛是多餘的功能,而不是直接所有寫到一個文件裏,猜測有多是在數據過多的時候,避免一個文件太大或者是他們的習慣?)。
另外使用的時候,我循環了10次,可是這三個文件我只設置了9行值,結果點擊運行,顯示只執行了9次,而不會循環從第一個文件中讀取。
固然,若是你就只是想讀取一個文件,直接在【輸入文件的全路徑】後面輸入文件的路徑便可,其他三個值不用填寫,點擊生成便可同樣調用
若是但願讓文件執行屢次,能夠按以下配置:
表示test.dat文件將會被讀取4次
當線程組大於(文件行數*4)時,將只會執行(文件行數*4)次,而不會循環讀取執行全部的設定線程組數,沒有指定讀取次數,則默認會循環讀取數據
二、引用函數:
每次調用計數器函數都會產生一個新值,從1開始每次加1。計數器既能夠被配置成針對每一個虛擬用戶是獨立的,也能夠被配置成全部虛擬用戶公用的。若是每一個虛擬用戶的計數器是獨立增加的,那麼一般被用於記錄測試計劃運行了多少遍。全局計數器一般被用於記錄發送了多少次請求。
計數器使用一個整數值來記錄,容許的最大值爲2,147,483,647。
功能:這個函數是一個計數器,用於統計函數的使用次數,它從1開始,每調用這個函數一次它就會自動加1,它有兩個參數,第一個參數是布爾型的,只能設置成「TRUE」或者「FALSE」,若是是TRUE,那麼每一個用戶有本身的計數器,能夠用於統計每一個線程歌執行了多少次。若是是FALSE,那就使用全局計數器,能夠統計出此次測試共運行了多少次。第二個參數是「函數名稱」
格式:${__counter(FALSE,test)}
使用:咱們將「_counter」函數生成的參數複製到某個參數下面,若是爲TRUE格式,則每一個線程各自統計,最大數爲循環數,若是爲FALSE,則全部線程一塊兒統計,最大數爲線程數乘以循環數
參數:
第一個參數:True,若是測試人員但願每一個虛擬用戶的計數器保持獨立,與其餘用戶的計數器相區別。False,全局計數器
第二個參數:重用計數器函數建立值的引用名。測試人員能夠這樣引用計數器的值:${test}。這樣一來,測試人員就能夠建立一個計數器後,在多個地方引用它的值。
以上,摘自網絡(不知道怎麼用,只好摘抄,記錄下來等靈感~~~~(>_<)~~~~ )。
目前,我測試_Counter函數,就是在參數列表加一個參數,值填寫爲${__counter(FALSE,test)}
如圖:
如上,設置爲false,那麼發送了多少個請求,counter1的最大值就等於最大請求數。
想知道counter1的值,能夠經過結果樹查看。
正則表達式函數可使用正則表達式(用戶提供的)來解析前面的服務器響應(或者是某個變量值)。函數會返回一個有模板的字符串,其中攜帶有可變的值。
_RegexFunction還能夠被用來保存值,以便供後續使用。具體的引用名是函數的第6個參數。在函數執行後,測試人員可使用用戶定義值的語法來獲取一樣的值。
例如,若是測試人員輸入「refName」昨晚第6個參數,那麼測試人員可使用:
${refName}來引用第二個參數的結果,即函數運行的結果。
${refName_g0}來引用函數解析後發現的全部匹配結果。
${refName_g1}來引用函數解析後發現的第一個匹配組合。
${refName_g#}來引用函數解析後發現的第N個匹配組合。
${refName_matchNr}來引用函數總共發現的函數匹配組合的數目。
參數:
第一個參數:用於解析服務器響應數據的正則表達式。它會找到全部的匹配項。若是測試人員但願將表達式中的某部分應用在模板字符串中,記得加上圓括號。例如,<a href="(.*)">。這樣就會將連接的值存放到第一個匹配組合中(這裏只有一個匹配組合)。又如,<input type="hidden" name="(.*)"value="(.*)">。在這個例子中,連接的name做爲第一個匹配組合,連接的value會做爲第二個匹配組合。這些組合能夠用在測試人員的模板字符串中
第二個參數:這是一個模板字符串,函數會動態填寫字符串的部份內容。要在字符串中引用正則表達式捕獲的匹配組合,請使用語法:$[group_number]$。例如$1$或者 $2$。測試人員的模板能夠是任何字符串
第三個參數:第3個參數告訴JMeter使用第幾回匹配。測試人員的正則表達式可能會找到多個匹配項。對此,測試人員有4種選擇:
一、整數,直接告訴JMeter使用第幾個匹配項。 「1」對應第一個匹配,「2」對應第二個匹配,以此類推
二、RAND,告訴JMeter隨機選擇一個匹配項
三、ALL,告訴JMeter使用全部匹配項,爲每個匹配項建立一個模板字符串,並將它們鏈接在一塊兒
四、浮點值0到1之間,根據公式(找到的總匹配數目*指定浮點值)計算使用第幾個匹配項,計算值向最近的整數取整
第四個參數:若是在上一個參數中選擇了「ALL」,那麼這第4個參數會被插入到重複的模板值之間
第五個參數:若是沒有找到匹配項返回的默認值
第六個參數:重用函數解析值的引用名,參見上面內容
第七個參數:輸入變量名稱。若是指定了這一參數,那麼該變量的值就會做爲函數的輸入,而再也不使用前面的採樣結果做爲搜索對象
以上摘自溫素劍的《零成本實現Web性能測試:基於Apache JMeter》。
步驟:
一、在jmeter中的【選項】中選擇【函數助手對話框】,將會彈出以下對話框:選擇_RegexFunction
參數的介紹見上文。
如上,在【 class="text have_icon" name="(.*)" id="email"】裏面,獲得到第一個匹配的name的值,若是沒有找到匹配的,獲得的值就爲hello
如上,咱們應該匹配獲得的值爲:EMAIL
使用:
查看是否成功:
記得上面咱們設定的第5個參數嗎?若是沒有在響應數據裏面找到匹配的,返回的值就爲咱們制定的hello,以下:
若是該正則函數在前面已經使用過,咱們在後面就能夠用咱們指定的第6個參數的值來引用該函數獲得函數解析的結果啦:
函數__javaScript能夠用來執行JavaScript代碼片斷(非Java),並返回結果值。JMeter的_javaScript函數會調用標準的JavaScript解釋器。JavaScript會做爲腳本語言使用,所以測試人員能夠作相應的計算。
在腳本中能夠訪問以下一些變量。
Log:該函數的日誌記錄器。
Ctx:JmeterContext對象。
Vars:JmeterVariables對象。
threadName:字符串包含當前線程名稱 (在2.3.2 版本中它被誤寫爲"theadName")。
sampler:當前採樣器對象(若是存在)。
sampleResult:前面的採樣結果對象(若是存在)。
props:JMeter屬性對象。
Rhinoscript容許經過它的包對象來訪問靜態方法。例如,用戶可使用以下方法訪問JMeterContextService靜態方法:
Packages.org.apache.jmeter.threads.JMeterContextService.getTotalThreads()
JMeter不是一款瀏覽器,它不會執行從頁面下載的JavaScript。
參數:
第一個參數:JavaScript代碼片斷,待執行的JavaScript代碼片斷。例如:
一、new Date():返回當前日期和時間
二、 Math.floor(Math.random()*(${maxRandom},+1)):在0 和變量maxRandom之間的隨機數
三、${minRandom}+Math.floor(Math.random()*(${maxRandom}-${minRandom}+1)):在變量 minRandom和maxRandom之間的隨機數"${VAR}"=="abcd"
第二個參數:變量名,重用函數計算值的引用名
請記得爲文本字符串添加必要的引號。另外,若是表達式中有逗號,請確保對其轉義。例如,${__javaScript('${sp}'.slice(7\,99999))},對7以後的逗號進行了轉義。
摘自《零成本實現Web性能測試:基於Apache JMeter》 。
步驟:
一、在jmeter中的【選項】中選擇【函數助手對話框】,將會彈出以下對話框:選擇__javaScript
這是獲得當前日期,引用:
獲得結果日期:
第二個參數是變量名,當該函數被執行一次以後,咱們就能夠根據變量名引用該函數,獲得函數解析的值: