一、概念
Ant 是一种基于Java 和XML 的build 工具,它可以让你轻松的编译和测试程序。Ant 使用一个XML 文件进行配置,这个文件也就是构建文件(buildfile) ,默认情况下被命名为build.xml 。Ant 的编译文件描述了你想应用在 项目中的每个任务。任务可能是编译Java 源码,生成Java 文档,查询数据库或者执行测试。编译文件可以有许多目标(target) ,或者叫进入点 (entry points) ,所以你可以执行某个单独的任务或者把他们串起来。
Junit 本质上是一套框架,即开发者制定了一套条条框框,遵循这此条条框框要求编写测试代码,如继承某个类,实现某个接口,就可以用Junit 进行自动测试了。
二、安装
下载apache-ant-1.7.0-bin.zip 和javamail-1_3_2-upd.zip 以及SVN1.4.3 。
1 把zip 分发包解压素到电脑上的某个目录(例如D:\Ant )。
2 在环境变量中增加一个ANT_HOME 变量,变量值就是Ant 的解压目录。例如:
变量名:ANT_HOME
变量值:D:\Ant\apache-ant-1.7.0 。
3 编辑你的系统的PATH 环境变量,加入ANT_HOME\bin 目录;
变量名:PATH
变量值:%ANT_HOME%\bin;.......
4 指定JDK 的安装目录
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.6.0
变量名:PATH
变量值:%JAVA_HOME%\bin;.......
5 为了可以执行Ant 的JUnit task ,必须把src.jar 和 junit.jar 拷贝到 ant\lib 文件夹中
6 安装SVN
三 配置
建立项目,其目录结果如下:
项目
--build 存放编译后的文件
--dist 存放测试结果的包
--lib 存放项目运行时所需要的包
--src 存放源文件
--build.properties Ant 定义变量的文件
--build.xml Ant 的buildfile
为了实现自动从SVN 上更新最新代码,需要将 svnant.jar 、svnClientAdapter.jar 和svnjavahl.jar 这三个包放到项目的lib 下;配置邮件的时候,依赖 activation.jar 和mail.jar 这两个包,将他们放到Ant\lib 下。
这样基本配置就完成了。
四 bilid.xml 文件
<?xml version="1.0" encoding="GBK"?>
<project name="junit-test" basedir="." default="mail">
<!-- all properties are in build.properties -->
<property file="build.properties"/>
<!-- 1 step checkout source files -->
<path id="project.classpath">
<pathelement location="${svnjavahl.jar}" />
<pathelement location="${svnant.jar}" />
<pathelement location="${svnClientAdapter.jar}" />
</path>
<taskdef resource="svntask.properties" classpathref="project.classpath"/>
<target name="clean">
<delete dir="${src.dir}"/>
</target>
<target name="checkoutThis" depends="clean">
<svn username="${username}" password="${password}">
<checkout url="${svnant.this.url}" revision="HEAD" destPath="${src.dir}"/>
</svn>
</target>
<!--2 step run junit tests-->
<!-- 配置基本属性-->
<property name="classpath" location="${build.dir}"/>
<!-- 配置测试报告的属性-->
<property name="report.xml" value="${report.dir}/junit/xml"/>
<property name="report.html" value="${report.dir}/junit/html"/>
<!-- 配置运行时classpath-->
<path id="classpath.run">
<pathelement path="${classpath}"/>
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
</path>
<!-- 配置测试时classpath-->
<path id="classpath.test">
<path refid="classpath.run"/>
<path location="${dist.dir}/test-${DSTAMP}.jar"/>
</path>
<!-- 任务初始化-->
<target name="init" depends="checkoutThis">
<tstamp/>
<delete dir="${build.dir}"/>
<delete dir="${report.dir}"/>
<delete dir="${dist.dir}"/>
<mkdir dir="${build.dir}"/>
<mkdir dir="${dist.dir}"/>
<copy todir="${build.dir}">
<fileset dir="${src.dir}/src/main">
<include name="**/*.*" />
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<!-- 配置编译源文件任务-->
<target name="compile" depends="init">
<javac srcdir="${src.dir}" destdir="${build.dir}">
<classpath refid="classpath.run" />
<include name="**/*.java"/>
</javac>
</target>
<!-- 配置打包任务-->
<target name="dist" depends="compile">
<mkdir dir="${dist.dir}"/>
<jar jarfile="${dist.dir}/test-${DSTAMP}.jar" basedir="${build.dir}"/>
</target>
<!-- 配置Juint 测试,打印测试结果-->
<target name="test" depends="compile,dist">
<mkdir dir="${report.xml}"/>
<mkdir dir="${report.html}"/>
<junit printsummary="yes" haltonfailure="no">
<classpath refid="classpath.run"/>
<classpath refid="classpath.test"/>
<formatter type="xml"/>
<batchtest fork="yes" todir="${report.xml}">
<fileset dir="${src.dir}/src/test" includes="**/*Test.java"/>
</batchtest>
</junit>
<junitreport todir="${report.html}">
<fileset dir="${report.xml}">
<include name="*.xml"/>
</fileset>
<report format="frames" todir="${report.html}"/>
</junitreport>
</target>
<!-- 将测试结果页面打成jar 包-->
<target name="JarReport" depends="test">
<jar jarfile="${report.dir}/report-${DSTAMP}.jar" basedir="${report.dir}"/>
</target>
<!-- 配置邮件-->
<target name="mail" depends="JarReport">
<mail mailhost="XXX" mailport="25" subject="Junit Test Result ">
<from address="[email protected]"/ >
<to address="[email protected] "/ >
<message>The nightly junit test has completed(refer to attachment)</message>
<fileset dir="${report.dir}">
<include name="report-*.jar"/>
</fileset>
</mail>
</target>
</project>
五 实现定时运行
通过批处理文件可以实现定时运行Junit 测试,文件内容如下:
d:
cd project
ant
将文件命名为Auto.bat ,打开控制面板- 任务计划- 添加任务计划,选择Auto.bat ,并设定时间等。
至此,在系统设定的时间点,系统会自动执行该项目的单元测试用例,并将其结果发送给所配置的邮件接受者。
六 配置过程中遇到的问题
1 、将系统变量设为%ANT_HOME%\bin 后,在命令行输入ant ,却提示不是内部命令或者外部命令。
解决:系统变量更改后需要重新启动机器才能生效,或者在命令行中输入path *:\***\bin 让其生效。
2 、发送邮件的时候,提示 [mail] Failed to initialise MIME mail: javax/mail/MessagingException 错误
解决:将 activation.jar 和 mail.jar 这两个包,将他们放到 Ant\lib 下。