7.2 JMeter內(nèi)置變量
JMeter在它的BeanShell中內(nèi)置了變量,用戶可以通過這些變量與JMeter進(jìn)行交互,其中主要的變量及其使用方法如下(JMeter文檔并沒有對該部分內(nèi)容進(jìn)行詳細(xì)講解,這里也會說明他們分別對應(yīng)于JavaDoc中的哪個類):
vars:這個變量實際引用了JMeter線程中的局部變量容器(本質(zhì)上是Map),因此可以通過put和get方法訪問JMeter中的變量。這個變量是所有內(nèi)置變量中有用的,它是測試用例與BeanShell交互的橋梁。對應(yīng)于org.apache.jmeter.threads.JMeterVariables
props:該變量引用了JMeter的配置信息,它的使用方法與vars類似,但是只能put進(jìn)去String類型的值,而不能是一個對象。對應(yīng)于java.util.Properties。
ctx:該變量引用了當(dāng)前線程的上下文,理論上通過這個東西我們幾乎可以控制當(dāng)前線程相關(guān)的一切,不過這要求使用者非常熟悉JMeter的源碼。對應(yīng)于org.apache.jmeter.threads.JMeterContext。
7.3 在BeanShell中使用Java類
有的時候我們希望發(fā)送數(shù)個請求,而這些請求的內(nèi)容是通過一個Java類來實現(xiàn)的,這時需要讓JMeter來調(diào)用這個Java類,而的途徑是通過BeanShell。
為了能夠加載Java類,我們首先需要在Test Plan中添加自定義Java類所在的Class Path,然后可以在BeanShell中import這個Java類,后再將獲得的內(nèi)容放入vars變量中,這樣可以在其他地方通過${...}的方式獲取該變量的信息了。
例如,創(chuàng)建了一個com.linhao.A類在/root/Java文件夾下,該類有一個方法hello()返回一個"Hello World"字符串,那么如果想在請求中使用這個方法返回的字符串,則進(jìn)行如下操作:
首先在Test Plan下添加ClassPath為/root/Java
然后在請求前添加一個BeanShell Sampler并寫入如下代碼:
view plaincopy to clipboardprint?
import com.linhao.A;
vars.put("word", A.hello());
import com.linhao.A;
vars.put("word", A.hello());
后在需要使用該字符串的地方寫${word},這樣終這個域?qū)⒈惶鎿Q為Hello World
7.4 JMeter下BeanShell的調(diào)試
BeanShell也是代碼,應(yīng)此也可能會有錯誤,而JMeter又是一個圖形界面的程序(也有命令行模式,但并不變于在設(shè)計用例階段使用),因此很多時候用例的設(shè)計者并不能確定BeanShell中某些變量是否正確。一個簡單的辦法是使用BeanShell創(chuàng)建一個對話框,然后將需要檢測的變量值顯示在對話框中。代碼如下:
view plaincopy to clipboardprint?
JFrame. frame. = new JFrame( a ); //a is a variable to be checked
frame.setVisible(true);
JFrame. frame. = new JFrame( a ); //a is a variable to be checked
frame.setVisible(true);
這樣當(dāng)測試執(zhí)行到這里的時候可以知道變量a的值了。
雖然BeanShell很強大,但是它畢竟是一個腳本語言,因此如果測試參數(shù)的生成邏輯很復(fù)雜,則還是應(yīng)該把主要邏輯放在Java類中,然后讓BeanShell去調(diào)用,BeanShell只用來處理一些較為簡單的操作
8、Jmeter使用之常用函數(shù)介紹
"_Random"函數(shù)
功能:這個函數(shù)是從某個數(shù)字段隨機(jī)讀取數(shù)據(jù)替換參數(shù),可以利用在測試需要添加多條數(shù)據(jù)記錄而且某些字段需要性的測試腳本中,隨機(jī)生成的參數(shù)是數(shù)字
作用:可以用來實現(xiàn)參數(shù)化http請求發(fā)送的參數(shù),使得在Jmeter運行時參數(shù)化了的參數(shù)在每個線程去不同的隨機(jī)數(shù)。如果某個參數(shù)每次發(fā)送請求的時候不能重復(fù)才可以存儲到數(shù)據(jù)庫中,則用這個功能十分方便。
使用:
1.點擊Jmeter的“選項”,選擇“函數(shù)助手對話框”(或者使用快捷鍵“Ctrl+F”),在“選擇一個功能”的下拉框中選擇“_Random”。
2.配置“_Random”函數(shù),第一個參數(shù)是“一個范圍內(nèi)的小值”,即所要取的隨機(jī)數(shù)的小值,我們設(shè)置成1;第二個參數(shù)是“一個范圍內(nèi)的大值”,即所要取的隨機(jī)數(shù)的大值,我們設(shè)置成100;第三個參數(shù)是“函數(shù)名稱”,即用于存儲在測試計劃中其他的方式使用的值,我們設(shè)置成Random。設(shè)置好上面的三個參數(shù)后,點擊“生成”按鈕,這樣會在對話框的下面生成一個字符串“${__Random(1,100,Random)}”,在我們編寫的腳本中,找到要替換的參數(shù),把它的值換成前面生成的字符串可以了,然后每次運行的時候,這個參數(shù)會變成一個1到100之間的隨機(jī)數(shù)。