ant 學習(3)--結合junit形成自動化測試小框架

ant 結合junit 進行軟件自動測試
1> 用ant 結合junit 啓動基本編譯和測試的自動過程如下:
★ 執行 JUnit 測試
★ 捕獲測試結果,將結果記錄到 XML 文件或其它格式的文件
★ 將結果轉化爲基於 XSL 格式的測試報告
★ 將這個報告轉化爲 HTML 格式
★ 用電子郵件發送報告 -----這個好像沒有實現哦,後面再學習補充
一旦捕獲結果,就可以使用 XML 格式化器將每個測試套件運行的故障和錯誤數,連
同軟件包和類名還有測試套件的執行時間一起引入。對於每個測試套件,都有以下信息被
捕獲:
☆ 測試案例的名稱
☆ 執行的持續時間
☆ 故障或錯誤的類型(如果適用)
☆ 任何故障或錯誤的詳細信息

2> 本次實例的目錄結構:
C:\car 主目錄
\src 源程序目錄
\classes 編譯後的class 文件目錄
\etc 其他
\xsl XSL 文件目錄
首先在 C盤創建car 目錄、src 子目錄和etc 子目錄,並從%ANT_HOME%\etc 下拷貝junit-noframes.xsl 文件至C:\car\etc\xsl 子目錄下。
3> 從
http://download.sourceforge.net/junit/junit3.8.zip 下載,解壓至C盤,將其目錄下的junit.jar 文件拷貝至%ANT_HOME%\lib 目錄下。

   (說明:這裏不一定要是3.8的版本,我想應該高於這個版本的junit的jar包就行)
4> 在src 子目錄下新建Car.java 以及testCar.java 文件。


 Car.java
 public class Car
{
public int getWheels()
{
return 3;
}
}
 testCar.java
 import junit.framework.*;
public class testCar extends TestCase
{
protected int expectedWheels;
protected Car myCar;
public testCar(String name)
{
super(name);
}
protected void setUp()
{
expectedWheels = 3;
myCar = new Car();
}
public static Test suite()
{
return new TestSuite(testCar.class);
}
public void testGetWheels()
{
assertEquals(expectedWheels, myCar.getWheels());
}
}


5> 在C:/car目錄下創建build.xml 和build.properties 文件。


 build.xml
 <?xml version="1.0"?>
  <project default="build" basedir=".">
   <property file="build.properties" description="Transfer property from .properties file"/>
   
   <target name="build" description="Build the work directory">
    <mkdir dir="${build.dir}" />
    <mkdir dir="${report.dir}" />
    <javac srcdir="${src.dir}" destdir="${build.dir}">
      <include name="**/*.java" />
    </javac>
   </target>
   
   <target name="junit" depends="build" description="Execute Unit Tests">
    <tstamp/> 
    <junit printsummary="yes">
     <classpath>
      <pathelement location="${build.dir}"/>
     </classpath>
     <formatter type="xml" />
     <batchtest todir="${report.dir}">
      <fileset dir="${src.dir}">
       <include name="**/testCar.java" />
      </fileset>
     </batchtest>    
    </junit>
    <junitreport todir="${report.dir}">
      <fileset dir="${report.dir}">
       <include name="TEST-*.xml"/>
      </fileset>
      <report format="noframes" styledir="${xsl.dir}" todir="${report.dir}"/>
    </junitreport>
      </target>
    
   <target name="clean" description="Delete the work directory">
     <delete includeEmptyDirs="true">
       <fileset dir="${build.dir}"/>
       <fileset dir="${report.dir}"/>
     </delete>
   </target>
  </project>
 build.properties
src.dir=src
build.dir=classes
xsl.dir=etc/xsl
report.dir=report


   6》運行ant junit

ant 學習(3) - 流口水的小豬 - 軌跡

 

ant 學習(3) - 流口水的小豬 - 軌跡

打開junit-noframes.html 測試報告  (顯然報告顯示期望結果是4,而得到的結果是3,所以測試失敗。可以修改Car.java 的結果,改3爲4,則可以測試成功)

ant 學習(3) - 流口水的小豬 - 軌跡

 

這裏生成junit-noframes.html 是因爲我們在junitreport中這麼設置的 <report format="noframes" styledir="${xsl.dir}" todir="${report.dir}"/>
即無框架顯示

如果我們改爲<report format="frames" styledir="${xsl.dir}" todir="${report.dir}"/> 讓其有框架顯示,則要求先從%ANT_HOME%\etc 下拷貝junit-frames.xsl 文件至C:\car\etc\xsl 子目錄下。即換一個有框架的模板

然後運行ant junit,其測試報告就變爲了

 

ant 學習(3) - 流口水的小豬 - 軌跡

 
 ----------------------------

進一步學習,解釋以上的內容

在build.xml 中運行了junit,junitreport。 這個兩個都是ant的task,在ant官方網站上有解釋但不是很明白,以下是在網絡中查到的解釋,我估計如果利用junitreport 具有以上知識就夠用了吧:),其實以下算是對上面junit ,junitreport的解釋吧

http://www.blogjava.net/joaquin25/articles/194801.html

 

一、Junit任務基本概念:
junit是ant的基本任務之一。這個任務運行一個或多個JUNIT測試,並收集以一種或多種格式顯示結果。下面是幾個junit任務的屬性
1、haltonfailure,printsummary分別表示如果測試失敗是否中止,是否打印基本信息。
2、fommatter--收集結果數據,一個或多個formatter可以直接在junit,test,或者batchtest下面嵌套使用。有以下三種formatter:
   brief:以文本格式提供測試失敗的詳細內容。
   plain:以文本格式提供測試失敗的詳細內容以及每個測試的運行統計
   xml:以xml格式提供擴展的詳細內容,包括正在測試時ant的特性,系統輸出,以及每個測試用例的系統錯誤。 
   <formatter type="xml"/>將會在data目錄下爲所有的測試用例都創建一個xml文件。
3、test
 運行單獨的測試用例
  <test name=.../>
4、batchtest,同時運行多個測試用例
  <formatter type="xml"/>
  <batchtest todir="">
   <fileset dir="" include=""/>
  </batchtest>
 測試的輸出結果將放到todir。而dir中所有的測試用例都將運行。
  xml formatter的默認命名規範爲Test-*.xml.
5、syspropertyset,運行junit test的時候,可以指定syspropertyset,這樣在Test*.java文件中可以通過System.getProperty();來獲取在構建文件中定義的property的值。例子:
   <propertyset id="propertyset1">
     <propertyref name=$#@##/>
     <propertyref prefix="#%##$"/>
   </propertyset>
   <junit>
    ...
    <syspropertyset refid="propertyset1"/>
   </junit>
6、sysproperty,也可以在junit中定義sysproperty,所定義的property的用法和上面的syspropertyset中的property的用法是一樣的。
    <sysproperty name="" value=""/>
7、fork="true",讓junit運行在獨立的jvm中。

 

二、junitreport任務
可以採用junitreport任務生成html的報告。junitreport任務首先將生成的xml文件整合成一個xml文件,一般命名爲TESTS-TestSuites.xml.然後再對xml文件進行轉換。其格式如下:
    <junitreport>
     <fileset dir="${test.data.dir}" includes="Test-*.xml"/>
     <report format="frames" todir=""/>
    </junitreport>

  在上面這個例子裏,junitreport任務將整合test.data.dir下面的Test-*.xml文件,並且生成html文件框架.
  report表示生成有框架或無框架的javadoc。

 

三、如何只運行單個測試。
   對test和batchtest使用if/unless來實現選擇性的運行單個測試或者運行整個測試。
   <junit>
    <test name=${testcase} if="testcase"/>
    <batchset todir="${dest}" unless="testcase">
     <fileset .../>
    </batchset>
   </junit>
   if表示只要testcase 這個property存在則會執行test,unless表示將會執行batchset,除非testcase這個property存在。因此如果想要運行單個測試,只需要在命令行中-Dtestcase=...即可。否則將會運行所有的testcases。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章