您的位置:軟件測試 > 開源軟件測試 > 開源性能測試工具 > Jmeter
JMeter BeanShell編程方式實現(xiàn)高效的數(shù)據(jù)模擬
作者:XMeter性能測試云服務(wù) 發(fā)布時間:[ 2017/6/19 9:37:10 ] 推薦標簽:性能測試工具 Jmeter 腳本

  在寫JMeter腳本的時候經(jīng)常需要模擬一些數(shù)據(jù),大部分情況下模擬數(shù)據(jù)一般采用“CSV Data Set Config”從CSV文件中取數(shù)據(jù)。但是使用數(shù)據(jù)文件的問題是不靈活,有多少虛擬用戶可能得準備多少測試數(shù)據(jù)。比如,某應(yīng)用的用戶注冊過程需要提供手機號碼,如果采用CSV文件,需要測試1000虛擬用戶則需要準備1000個手機號碼,如果測試過程中要增加虛擬用戶數(shù)目,則需要準備更多的測試數(shù)據(jù),這個過程比較費事。對于某些特殊的有規(guī)律的測試數(shù)據(jù),我們可以采用動態(tài)生成測試數(shù)據(jù)的方式,比如利用本文介紹的BeanShell。
  具體需求
  某手機應(yīng)用的用戶注冊過程需要提供手機號碼,測試場景中除了用戶注冊過程中會被用到之外,不會對手機號碼產(chǎn)生實際操作行為(比如發(fā)送短信等),只需要符合在數(shù)據(jù)庫中表的定義即可(11位char類型)。
  實現(xiàn)
  實現(xiàn)過程需要考慮不同的虛擬用戶在運行的時候不能產(chǎn)生相同的號碼,另外還需要考慮同一個虛擬用戶在多次循環(huán)執(zhí)行的情況下也不能產(chǎn)生相同的號碼。為了實現(xiàn)上述需求,我們需要有一個標識虛擬用戶的ID,以及在多次循環(huán)執(zhí)行的情況下標識的當(dāng)前循環(huán)次數(shù)的值。
  標識虛擬用戶可以通過JMeter的內(nèi)置function - threadNum來得到,而后者可以通過JMeter提供的計數(shù)器來實現(xiàn),先來看一下我們的腳本的結(jié)構(gòu)。“HTTP請求”需要拿到手機號碼發(fā)起一個測試請求,該手機號碼是從一個名為mobile的JMeter變量里取得的,而該變量是通過“BeanShell PreProcessor”處理之后保存到JMeter的變量里。

  BeanShell的實現(xiàn),具體請看下面的代碼注釋。
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位手機號碼
  System.out.println(fullNum);
  vars.put("mobile", fullNum); //將手機號碼存入名為mobile的變量,該變量可以在“HTTP請求”中用到
  計數(shù)器的定義:如下圖所示,引用名稱是在BeanShell里引用的iterNO變量。

  BeanShell實現(xiàn)的方式的問題在于不是很高效,為了提高效率可以采用JMeter的function來實現(xiàn),讀者可以參考這篇文章。

軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd