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