selenium+testng+gitblit+jenkins+ant自动化测试系列九:ant的build.xml文件详解及运用

本节主要介绍ant的build.xml文件,以及通过build.xml来运行项目。Ant构建文件默认命名为build.xml,也可以取其他的名字。只不过在运行的时候把这个命名当作参数传给Ant。构建文件可以放在任何的位置。一般做法是放在项目顶层目录中

1)每个构建文件定义一个唯一的项目(Project元素)。

2)每个项目下可以定义多个目标(target元素),这些目标之间可以有依赖关系。当执行这类目标时,需要执行他们所依赖的目标。

3)每个目标中可以定义多个任务,目标中还定义了所要执行的任务序列。

4)Ant在构建目标时必须调用所定义的任务。任务定义了Ant实际执行的命令。

Ant中的任务可以为3类。

(1) 核心任务。核心任务是Ant自带的任务。

(2) 可选任务。可选任务是来自第三方的任务,因此需要一个附加的JAR文件。

(3) 用户自定义的任务。用户自定义的任务是用户自己开发的任务。

 

以下为对照我使用的build.xml模版进行说明,本文后面会附带完整的build.xml

<?xml version="1.0" encoding="UTF-8"?>
build.xml中的第一句话,没有实际的意义  
<project name="Demo1" default="run" basedir=".">
<project>标签,每个构建文件对应一个项目。<project>标签是构建文件的根标签。
它可以有多个内在属性,如代码中所示,其各个属性的含义分别如下。
(1) default表示默认的运行目标,这个属性是必须的。
(2) basedir表示项目的基准目录。.表示当前目录
(3) name表示项目名。
每个构建文件都对应于一个项目,但是大型项目经常包含大量的子项目,
每一个子项目都可以有自己的构建文件。
<echo  message="import libs" />
在窗口打印出“import libs”
<path id="run.classpath">
Path元素用来表示一个类路径,此处为定义jar包的路径,其拥有的属性如下:
(1)location 表示一个文件或目录。Ant在内部将此扩展为一个绝对路径。 
(2)refid 是对当前构建文件中某处定义的一个path的引用。 
(3)path表示一个文件或路径名列表。 
        <fileset dir="${basedir}">
            <include name="lib/*.jar" />
        </fileset>    
Fileset 数据类型定义了一组文件,并通常表示为<fileset>元素。
.dir表示fileset 的基目录。 
excludes 是用逗号分隔的需要排除的文件模式列表。 
includes 是用逗号分隔的,需要包含的文件模式列表。 
</path>
<taskdef name="testng" classname="org.testng.TestNGAntTask" classpathref="run.classpath" />
声明task jar包中指定的task,因项目中使用到testng,这里是声明jar包中的testng,
然后,就可以使用当前目录下,testng包中,提供的org.testng.TestNGAntTask任务了,
任务标签为TestNGAntTask
<target name="clean">
<target>标签 ,一个项目标签下可以有一个或多个target标签。一个target标签可以
依赖其他的target标签。Target的常用属性如下:
(1)name表示标明,这个属性是必须的。
(2)depends表示依赖的目标。
(3)if表示仅当属性设置时才执行。
(4)unless表示当属性没有设置时才执行。
(5)description表示项目的描述。
Ant的depends属性指定了target的执行顺序。Ant会依照depends属性中target
出现顺序依次执行,每个target。在执行之前,首先需要执行它所依赖的target。
该xml文件中,名为compile的target的depends属性clean,而名为run的target
的depends属性是compile,所以这几个target执行的顺序是clean->compile->run。
一个target只能被执行一次,即使有多个target依赖于它。
如果没有if或unless属性,target总会被执行。
        <delete dir="build"/>
<delete>标签,该标签用于删除一个文件或一组文件,属性如下:
(1)file表示要删除的文件。
(2)dir表示要删除的目录。
(3)includeEmptyDirs 表示指定是否要删除空目录,默认值是删除。
(4)failonerror 表示指定当碰到错误是否停止,默认值是自动停止。
(5)verbose表示指定是否列出所删除的文件,默认值为不列出。
    </target>
<target name="compile" depends="clean">
定义一个编译compile target,需要先执行clean target,才会执行compile
        <echo message="mkdir"/>
在窗口打印出“mkdir”
        <mkdir dir="build/classes"/>
mkdir 标签用于创建一个目录,属性dir用来指定所创建的目录名,
即新建一个build/classes目录,用来存放编译后生成的.class文件
        <javac srcdir="src" destdir="build/classes" debug="on"  includeAntRuntime="false">
<javac标签>该标签用于编译一个或一组java文件,其属性如下:
(1).srcdir表示源程序的目录。
(2).destdir表示class文件的输出目录。
(3).include表示被编译的文件的模式。
(4).excludes表示被排除的文件的模式。
(5).classpath表示所使用的类路径。
(6).debug表示包含的调试信息。
(7).optimize表示是否使用优化。
(8).verbose 表示提供详细的输出信息。
(9).fileonerror表示当碰到错误就自动停止。
           <compilerarg line="-encoding UTF-8 "/>  
给编译器指定编码,采用UTF-8编码,防止出现:"警告: 编码 GBK 的不可映射字符
            <classpath refid="run.classpath"/>
refid 是对当前构建文件中某处定义的一个path的引用。 
    </target>
<path id="runpath"> 
此处定义runpath为项目编译后文件的路径
         <path refid="run.classpath"/> 
         <pathelement location="build/classes"/> 
location 表示一个文件或目录。Ant在内部将此扩展为一个绝对路径。 
       </path> 
<target name="run" depends="compile">
定义一个运行run target,需要先执行compile target,才会执行run
        <testng  classpathref="runpath"  outputDir="test-output">
Classpathref为引用上面定义的runpath,并将结果输出到test-output目录
            <xmlfileset dir="${basedir}" includes="testng.xml"/>
因为我的项目中使用了testng,执行时是直接运行testng.xml,
所以这里使用xmlfileset设置testng.xml文件的路径,以及指明该文件的名称
            <jvmarg value="-ea" />
设置jvm参数
        </testng>
    </target>
        </javac>

成功为项目添加build.xml文件后,在cmd命令模式下切换到工程build.xml文件的目录,(我的build.xml直接放在项目顶层目录)直接输入ant,即可实现自动运行程序了,而不再需要打开eclipse去运行了。见截图,执行顺序为clean-compile-run

 

也可以在eclipse中左侧选中build.xml文件,右键run as-ant build,同样可以成功运行程序。



完整build.xml文件如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<project name="Demo1" default="run" basedir=".">
    <echo  message="import libs" />
    <path id="run.classpath">
        <fileset dir="${basedir}">
            <include name="lib/*.jar" />
        </fileset>
    </path>
    <taskdef name="testng" classname="org.testng.TestNGAntTask" classpathref="run.classpath" />
    <target name="clean">
        <delete dir="build"/>
    </target>
    <target name="compile" depends="clean">
        <echo message="mkdir"/>
        <mkdir dir="build/classes"/>
        <javac srcdir="src" destdir="build/classes" debug="on"  includeAntRuntime="false">
       			 <compilerarg line="-encoding UTF-8 "/>  
            <classpath refid="run.classpath"/>
        </javac>
    </target>
    <path id="runpath"> 
         <path refid="run.classpath"/> 
         <pathelement location="build/classes"/> 
       </path> 
    <target name="run" depends="compile">
        <testng  classpathref="runpath"  outputDir="test-output">
            <xmlfileset dir="${basedir}" includes="testng.xml"/>
            <jvmarg value="-ea" />
        </testng>
    </target>
</project>

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值