用 ant 自動化測試 (轉)
利用ant和junit實現單元測試的自動化
在軟件開發過程中,我們通常需要對各個功能模塊以至類的方法進行詳細的測試。這種對最小的軟件單元進行驗證的工作也叫做單元測試,單元測試通常在編碼過程中進行,在以測試驅動開發的項目中,單元測試是一項非常重要的工作,但隨著開發過程的深入,我們所積累的單元測試案例就會越來越多,面對成百上千個測試類,單獨運行每個案例不僅費時,而且很難在以后的集成測試中利用先前的單元測試案例構建出一個完整的測試報告。
Junit是一個用于java軟件測試的開源項目,主要的應用也是作為單元測試,雖然設計短小,但功能卻是非常強大。目前有很多在junit上進行擴展的項目幫助我們完成各種測試。比如web性能測試的httpunit,jmeter,用于代碼覆蓋測試的hansel,用于數據庫性能測試的dbunit等等,應用遍布軟件測試的各個領域。
Ant同樣是一個非常優秀的java項目構建工具。據ant的創始人James Duncan Davidson說,ant代表:"Another Neat Tool"。同樣的,ant在英文中是“螞蟻“的意思,這又代表著它有建筑本領高超和身軀雖小,但功能卻極其強大的意思(可以參看:http://ant.apache.org/faq.html#ant-name),ant項目從2000年開始,一直未停止更新工作,目前的最高版本是1.7.0。
在下面我們還需要用到java的IDE開發工具Eclipse。在最新的3.2版本中,eclipse已經整合了junit4、junit3.8.1和ant1.6.5。但由于只有在ant1.7.0以后版本中才開始支持junit,因此需要我們從http://ant.apache.org下載最新的1.7.0,并重新設置eclipse的Ant Home的位置指向ant1.7.0的lib包。如圖:
Eclipse里面已經自帶了junit4和junit3.8.1,如果使用的jdk環境是5.0(jdk1.5)可以使用junit4,如果是1.4則使用junit3.8.1。查看和設置項目的jdk環境可以通過project ->properties ->java compiler.如圖:
默認情況下,"Enable project specific settings" 選項是未選中的,則項目使用當前操作系統默認的java環境(跟你設置的java build path無關)。
下面,我們創建一個測試項目,名字為:test,并創建兩個源文件夾:src和test..把項目源文件和測試文件分開放在這兩個文件夾中。
我們在src編寫一個測試類:
package com.widetrust;
public class CountService {
private int summary;
private int count;
public boolean stat(int visitor){
count++;
summary += visitor;
if(summary>1000 && count>2){
return true;
}else{
return false;
}
}
}
|
在test文件夾寫個測試該類的類:
package com.widetrust.test;
import com.widetrust.CountService;
import junit.framework.TestCase;
public class TestCountService extends TestCase {
CountService cs;
protected void setUp() throws Exception {
cs = new CountService();
}
protected void tearDown() throws Exception {
}
public void testStat(){
assertEquals(true, cs.stat(4000));
}
public void testStat2(){
cs.stat(2000);
cs.stat(2000);
assertEquals(true, cs.stat(3000));
}
}
|
當然我們可以利用eclipse的Run As Junit Test(快捷鍵:Alt+Shift+X T)運行我們剛寫好的測試案例,但有個問題是eclipse不能正確的同步我們的開發和測試程序,而且,我們可能還希望測試的過程中為我們提供一份詳細的報告文檔,以供我們在測試后的改進過程中的討論。現在我們使用ant的自動編譯功能來實現測試的自動化,并讓它生成一份詳細的測試報告。
注意的是,ant自帶了junit的支持包,但項目需要junit.jar,還需要在項目的lib文件夾中放置junit.jar,(這里我假設工程目錄存放項目依賴組件的是lib文件夾)如果我們要單獨使用ant編譯整個項目,需要在項目構建文件build.xml中定義編譯所用到的lib包。當然,為了省事,我們也可以把項目依賴的lib包放到ant的設置項Global Entries 中,如圖:
這里我們把項目依賴包都設置在build.xml中:
在項目的根目錄創建一個build.xml,內容如下:
<?xml version="1.0"?>
<project name="ant and junit" default="test auot junit and report" basedir=".">
<!-- 定義工程依賴的jar包存放的位置 -->
<property name="lib.dir" value="lib"/>
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>
<property name="output folder" value="classes"/>
<property name="src folder" value="src"/>
<property name="test folder" value="test"/>
<property name="report folder" value="report"/>
<target name="clean">
<delete dir="report"/>
<echo>清除測試報告文件 成功!</echo>
</target>
<target name="compile init">
<mkdir dir="${output folder}"/>
<echo>創建編譯文件夾 成功!</echo>
</target>
<target name="report init"depends="clean">
<mkdir dir="${report folder}"/>
<echo>創建測試報告文件夾 成功!</echo>
</target>
<target name="compile"depends="compile init">
<javac srcdir="${src folder}" destdir="${output folder}" classpathref="classpath"/>
<echo>項目源文件編譯 成功!</echo>
</target>
<target name="test compile" depends="report init">
<javac srcdir="${test folder}" destdir="${output folder}" classpathref="classpath"/>
<echo>項目測試文件編譯 成功!</echo>
</target>
<target name="all compile" depends="compile, test compile">
</target>
<target name="test auot junit and report" depends="all compile">
<junitprint summary="on" fork="true" showoutput="true">
<classpath>
<fileset dir="${lib.dir}"includes="**/*.jar"/>
<pathelement path="${output folder}"/>
</classpath>
<formatter type="xml"/>
<batchtest todir="${report folder}">
<fileset dir="${output folder}">
<include name="**/Test*.*"/>
</fileset>
</batchtest>
</junit>
<junitreport todir="${report folder}">
<filesetdir="${report folder}">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="${report folder}"/>
</junitreport>
</target>
</project>
|
我們在eclipse中利用windows -> show View -> Ant 打開ant工作窗口,點擊”Add Buildfiles” 將項目的根目錄下的build.xml添加進去,然后在ant工作窗口點運行圖標,可以看到控制臺上的輸出:(當然,用命令行方式運行也可以)
整個項目編譯成功,并在項目根目錄生成一個report文件夾,我們可以從中看到一份詳細的測試報告:
我們可能會希望junit 和ant為我們提供中文的測試報告,很遺憾的是,ant并沒有給我們提供這個選項,還好,ant可以讓我們通過定義styledir屬性,更改報告文件的輸出樣式的配置文件:我們要做的,就是漢化在ant安裝文件夾中的junit-frames.xsl和junit-noframes.xsl,(也可以從http://download.csdn.net/user/lemonfamily 下載到該文件)甚至可以在里面定義一些我們需要的東西。
<junitreporttodir="${report folder}">
<filesetdir="${report folder}">
<includename="TEST-*.xml"/>
</fileset>
<reportformat="frames"todir="${report folder}"styledir="junitreport"/>
</junitreport>
|
這是更改后的效果:
現在我們已經可以做到測試代碼和開發代碼分開,并利用ant的自動編譯功能為我們執行測試計劃和生成測試報告。雖然在編寫測試案例的時候確實比較麻煩,我們需要詳細的模擬實際應用中的環境,并尋找可能出現錯誤的邊界值幫助我們在編寫實際代碼時盡量減少隱患的發生,往往編寫測試案例的時間比我們編寫實際代碼的時間還長,但這樣做是非常值得的,一個軟件的開發周期最長的60%都是花在尋找錯誤和完善的過程中。
posted on 2007-09-03 18:00 leoli 閱讀(2418) 評論(0) 編輯 收藏 所屬分類: test