1. 程式人生 > >關於JMeter的CSV Data Set Config的原始碼改寫(包括了部分介面等程式碼的分析)

關於JMeter的CSV Data Set Config的原始碼改寫(包括了部分介面等程式碼的分析)

為什麼準備去研究關於CSV Data Set Config的設定呢,之前一直都是在使用CSV Data Set Config進行引數的時候,通常的做法是在Variable Names (comma-delimited)文字編輯框中輸入引數名稱,如下圖:

然後testcase.csv的內容如下:

但是每次回頭去看這個引數化檔案的時候,總覺得沒用表頭挺痛苦的,可是加上了表頭資料就總會讀出來表頭的資訊,而不是我們真正需要引數化的一行資料。於是便有了第一幅圖中linenumber的出現。最開始的想法是根據指定的行號來讀取引數化檔案,這樣我每次就可以從第二行開始讀資料了。至於,第一幅圖中的linenumber為什麼是個下拉框而非文字框,後面講原始碼的時候會說。

既然想要修改程式碼首先就需要有jmeter的原始碼,原始碼我們可以去官網下載。目前最新的版本是apache-jmeter-2.13。下載地址:http://jmeter.apache.org/download_jmeter.cgi

如下圖:

下載後將檔案進行解壓,解壓後如下:

這下該講如何把這些原始碼配置到MyEclipse中。

1、      新建一個javaproject工程,然後隨便起個名字,我這裡叫jmeter2.13.然後需要有一些配置,如下:

2、      開始進行匯入,匯入的時候選擇File System。如下圖:

3、      選擇下載的原始碼檔案的根目錄,如下:

4.點選完成後,我們新建的Jmeter原始碼的工程便建立好了。此時我們需要關閉MyEclipse,將該工程下的”eclipse.classpath”檔案中的內容覆蓋掉” .classpath” 中的內容,然後再重新開啟MyEclipse,看看我這個新建的工程,如下圖:

此時我們發現我們的工程上有個紅色的感嘆號,這是為什麼呢??因為我們的工程中缺少了我們需要的一些關鍵包。這個怎麼辦呢?接下來我們需要使用ant來對我們的工程進行build操作。

Ant的安裝

目前我下載的時候的最新版本是1.9.7,下載後將ant進行解壓。

2、配置ant的環境變數,需要設定三個地方ant_home=d:/apache-ant-1.9.7path=%ANT_HOME%\bin;  classpath=%ANT_HOME%\lib;

3、驗證ant環境是否配置好。為了驗證ant是否成功安裝,可以進行如下操作:

依次選擇:開始->執行->cmd,輸入如下命令:ant

如果出現如下內容,說明安裝成功:

Buildfile: build.xml does notexist!

Build failed

【說明ant安裝成功!因為ant預設執行build.xml檔案,這個檔案需要我們建立。】

檢視版本:ant  -version

此時我們的ant安裝成功了。我們可以開始build我們的java工程了。

接下來我們需要修改下build.xml檔案。主要是將其中的java版本修改成和MyEclipse中使用的jdk版本一致。具體如下:

然後我們就可以開始build工作了,此時MyEclipse中會報錯,具體錯誤如下:

這裡我們需要使用ant工具來進行相關jar包的下載。具體的使用方法是,進入cmd命令介面,然後進入我們工程的目錄,目前我的路徑是D:\workspace\jmeter2.14。在該目錄下找到lib資料夾,進入/lib/api資料夾下,此時最好在網上先下載3個jar包放在這個資料夾下,3個jar包分別是:“bcmail-jdk15on-1.49.jar”、“bcpkix-jdk15on-1.49.jar”、“bcprov-jdk15on-1.49.jar”。拷貝完以後變可以在CMD中我們的工程路徑下敲入“ant download_jars”,此時就會下載相應的依賴的jar包了。當出現“build successful”的文字的時候,就表示成功的把依賴的jar包都下載下來了。此時我們的java工程中的感嘆號也就沒有了。此時我們就可以修改jmeter的原始碼,然後重新build該工程,重新build成功後,在工程中的bin目錄下點jmeter.bat,此時執行的程式就是我們修改後的程式了。既然要修改程式,我們就來了解一下jmeter原始碼的程式結構,次處摘自網上:

而jmeter的原始碼也可以到github上去下載,下載地址是: https://github.com/apache/jmeter

如果要修改CSV Data Set Config介面程式碼就應該在components下,其中主要的2個類都在org.apache.jmeter.config下,在CSVDataSetBeanInfo.java檔案中,我們需要首先建立一個String型別的變數linenumber,然後對linenumber進行設定,程式碼如下:

光有這個還不行,還需要對“CSVDataSetResources.properties”檔案進行設定,在該檔案中屬性的名稱你可以自己起,但是值必須是linenumber,否則程式在執行的時候會到屬性檔案中去校驗這個值是否存在。同時需要你在上圖中想使用的元素型別在CSVDataSet.java類中新建相關型別的變數,名字也叫linenumber,然後要加上set和get方法。此時如果重新執行程式,新增加的這個元素就可以顯示在CSV Data Set Config介面上了。

==========================================================================

接下來就可以打斷點進行程式碼的除錯了,除錯的時候main函式的入口在原始碼結構的core下的org.apache.jmeter中的NewDriver類。在這個類中,需要將其中的jmDir=tmpDir;修改為jmDir="d:/workspace/jmeter2.13";否則會報檔案路徑的錯誤。剩下的關於引數檔案的讀取邏輯就在CSVDataSet.java中的iterationStart方法,具體的邏輯大家可以自己跟(debug)了。

在跟程式碼的過程中發現了JMeter其實做的很不錯了,人家都想到了。如果想讓我們的CSV Data Set Config中的引數化檔案向loadrunner一樣包含表頭的話,我們只需要在配置的介面中Variable Names (comma-delimited)項為空就可以了。此時在引數檔案中向loadrunner寫上表頭的名字就可以了,表頭的各個欄位的名字也就是我們將來用的引數的名字了,如果在Variable Names (comma-delimited)也新增上引數欄位的名字就好了,畢竟這樣看起來方便,於是想了一下規則,必須讓Variable Names (comma-delimited)中的內容和引數檔案中表頭的內容一致,此時就不讀表頭資訊,而是直接從第二行開始讀取就可以了。於是對程式碼做了如下的修改:

如果以後還想從第幾行開始讀取,那也就是我最開始提到的linenumber了,至於程式碼怎麼修改,有機會再去嘗試了,應該是很好實現的。

好了,整個程式碼的修改過程就完畢了。