? ? 本文版權(quán)歸xmeter.net所有报慕。歡迎轉(zhuǎn)載深浮,轉(zhuǎn)載請(qǐng)注明出處。
? ? 在寫JMeter腳本的時(shí)候經(jīng)常需要模擬一些數(shù)據(jù)眠冈,大部分情況下模擬數(shù)據(jù)一般采用“CSV Data Set Config”從CSV文件中取數(shù)據(jù)飞苇。但是使用數(shù)據(jù)文件的問題是不靈活,有多少虛擬用戶可能就得準(zhǔn)備多少測(cè)試數(shù)據(jù)。比如布卡,某應(yīng)用的用戶注冊(cè)過程需要提供手機(jī)號(hào)碼雨让,如果采用CSV文件,需要測(cè)試1000虛擬用戶則需要準(zhǔn)備1000個(gè)手機(jī)號(hào)碼羽利,如果測(cè)試過程中要增加虛擬用戶數(shù)目宫患,則需要準(zhǔn)備更多的測(cè)試數(shù)據(jù),這個(gè)過程比較費(fèi)事这弧。對(duì)于某些特殊的有規(guī)律的測(cè)試數(shù)據(jù)娃闲,我們可以采用動(dòng)態(tài)生成測(cè)試數(shù)據(jù)的方式,比如利用本文介紹的BeanShell匾浪。
具體需求
? ? 某手機(jī)應(yīng)用的用戶注冊(cè)過程需要提供手機(jī)號(hào)碼皇帮,測(cè)試場景中除了用戶注冊(cè)過程中會(huì)被用到之外,不會(huì)對(duì)手機(jī)號(hào)碼產(chǎn)生實(shí)際操作行為(比如發(fā)送短信等)蛋辈,只需要符合在數(shù)據(jù)庫中表的定義即可(11位char類型)属拾。
實(shí)現(xiàn)
? ? 實(shí)現(xiàn)過程需要考慮不同的虛擬用戶在運(yùn)行的時(shí)候不能產(chǎn)生相同的號(hào)碼,另外還需要考慮同一個(gè)虛擬用戶在多次循環(huán)執(zhí)行的情況下也不能產(chǎn)生相同的號(hào)碼冷溶。為了實(shí)現(xiàn)上述需求渐白,我們需要有一個(gè)標(biāo)識(shí)虛擬用戶的ID,以及在多次循環(huán)執(zhí)行的情況下標(biāo)識(shí)的當(dāng)前循環(huán)次數(shù)的值逞频。
? ? 標(biāo)識(shí)虛擬用戶可以通過JMeter的內(nèi)置function - threadNum來得到纯衍,而后者可以通過JMeter提供的計(jì)數(shù)器來實(shí)現(xiàn),先來看一下我們的腳本的結(jié)構(gòu)苗胀〗笾睿“HTTP請(qǐng)求”需要拿到手機(jī)號(hào)碼發(fā)起一個(gè)測(cè)試請(qǐng)求,該手機(jī)號(hào)碼是從一個(gè)名為mobile的JMeter變量里取得的基协,而該變量是通過“BeanShell PreProcessor”處理之后保存到JMeter的變量里歌亲。
BeanShell的實(shí)現(xiàn),具體請(qǐng)看下面的代碼注釋澜驮。
import java.text.DecimalFormat;
String strThreadNum = "${__threadNum}"; //取得當(dāng)前的虛擬用戶ID
int thNum = Integer.parseInt(strThreadNum);String str = "${iterNO}"; //取得該虛擬用戶當(dāng)前的循環(huán)次數(shù)
int i = Integer.parseInt(str);int mobileNumLastFive = thNum * 10000 + i;
DecimalFormat df = new DecimalFormat( "0000000000" );
String fullNum = 4 + df.format(mobileNumLastFive); //格式化成4開頭的11位手機(jī)號(hào)碼
System.out.println(fullNum);
vars.put("mobile", fullNum); //將手機(jī)號(hào)碼存入名為mobile的變量陷揪,該變量可以在“HTTP請(qǐng)求”中用到
計(jì)數(shù)器的定義:如下圖所示,引用名稱就是在BeanShell里引用的iterNO變量杂穷。
BeanShell實(shí)現(xiàn)的方式的問題在于不是很高效鹅龄,為了提高效率可以采用JMeter的function來實(shí)現(xiàn),讀者可以參考這篇文章亭畜。
關(guān)于我們
XMeter成立于2016年扮休,核心團(tuán)隊(duì)都來自于IBM,是一家領(lǐng)先技術(shù)的性能測(cè)試持續(xù)集成咨詢與服務(wù)提供商拴鸵。我們致力于提供給客戶可靠,簡單,低成本的性能測(cè)試解決方案玷坠。