Jenkins使用(6):jenkins+ant+junit持續集成單元測試實戰

對於相關的配置問題,網上一搜一大把,可自行搜索配置,

本次博客主題主要是對ant的build.xml和項目的結構之間對應關係的描述。看懂之後您可根據此博客進行更改相關build文件.

我也是剛剛接觸,描述不詳細請見諒。

1.項目結構如圖1:ant可以對項目進行打包以及測試,在對項目進行單元測試之前,需要先添加圖一中圈中的兩個文件,這是ant需要的。

                                                              圖一

2.編輯build.properties

env=dev

3.編輯build.xml,這是最關鍵的,只要build.xml文件寫好了,其他都是順手的事。

build文件之後不要着急與jenkins進行集成,右鍵點擊build.xml/run as /ant build成功之後,再進行集成jenkins。

build.xml文件如下:(裏面內容我進行了詳細註釋,可根據註釋進行修改適合你的項目)

<?xml version="1.0" encoding="UTF-8"?>
<project name="項目名稱" default="junit" basedir="."> <!--當default=junit執行單元測試,default=warFile執行打包  -->
<!--必須放在最前面,可以確保能使用到編譯平臺的環境變量  -->
<property environment="env" />
<!--項目名稱 -->
<property name="webapp.name" value="項目名稱" />
<!--生成的war包 放置路徑 -->
<property name="dist.dir" value="${basedir}/dist" />
<!--項目WebRoot -->
<property name="webRoot.dir" value="${basedir}/WebRoot" />
<!--java 文件目錄 -->
<property name="src.dir" value="${basedir}/src" />
<!--test 文件目錄 -->
<property name="test.dir" value="${basedir}/test" />	
<!--配置文件目錄 -->
<property name="config.dir" value="${basedir}/config" />
<!--測試報告存放路徑 -->
<property name="junit-report" value="${basedir}/build/junit-report" />
<property name="test.xml" value="xml"/>
<property name="test.lib" value="${basedir}/WebRoot/WEB_INF/lib/junit-3.8.1.jar" />
<!--jar包 -->
<property name="lib.dir" value="D:\Workspaces\MyEclipse 9\onRoad\WebRoot\WEB-INF\lib" /><!--jar包路徑可以是相對的,也可以是絕對路徑,這裏使用的絕對路徑,需要修改你項目對應的路徑-->
<property name="java5_lib" location="C:\Users\ypp\AppData\Local\Genuitec\Common\plugins\com.genuitec.eclipse.j2eedt.core_9.0.0.me201009231754\data\libraryset\EE_5"/><!--此處同上-->	

<!--編譯後存放路徑 -->
<property name="build.dir" value="${basedir}/build" />
<property file="build.properties" />

<!-- 初始化classpath -->
<!--這裏會加載所有項目所需要的jar包>
<path id="project.classpath">
	<fileset dir="${lib.dir}">
		<include name="**/*.jar" /> 
                <!--include顧名思義就是匹配包含該目錄下所有jar包-->
	</fileset>
	<fileset dir="${java5_lib}">
		<include name="**/*.jar" />
	</fileset>
</path>

<!-- get the source compile classpath in a printable form -->
<!--pathconvert是Ant內置任務,用於將嵌套的資源集合或僅對一個的引用轉換爲特定平臺的路徑格式-->
<!--具體詳解:https://blog.csdn.net/asty9000/article/details/79880769  -->
<pathconvert pathsep="${line.separator}|   |-- " property="echo.path.compile" refid="project.classpath">
</pathconvert>


<!-- show classpath jars -->
<target name="print_classpath">
<echo message="|-- compile classpath" />   <!--echo用來輸出相關提示信息-->
<echo message="|   |" />
<echo message="|   |-- ${echo.path.compile}" />
</target>

<!-- 刪除之前的目錄結構 -->
<target name="clear" description="清理舊文件">
<delete dir="${build.dir}" />
<delete dir="${dist.dir}" />
<delete dir="${config.dir}" />
<delete dir="${junit-report}" />
</target>

<!-- 創建目錄結構 --> 
<target name="init" depends="clear" description="創建初始化目錄結構">
      <!--這裏depend屬性表依賴,該init的執行需要target name=“clear”先執行成功-->
<mkdir dir="${build.dir}/classes" />  <!-- mkdir屬性用來創建目錄-->
<mkdir dir="${dist.dir}" />
<mkdir dir="${config.dir}" />
<mkdir dir="${junit-report}" />      <!--測試目錄所在-->
</target>

<!-- 編譯java -->
<target name="compile" depends="init" description="編譯java文件">
<echo message="begin compile..." />
<echo message="當前環境------>${env}" />
<echo message="當前環境配置文件目錄------>${config.dir}/${env}" /> <!--srcdir="${basedir}/src" -->
<javac encoding="GBK"  destdir="${build.dir}/classes" includeantruntime="false" nowarn="on" deprecation="false" debug="on"  fork="true" memoryMaximumsize="768m" memoryInitialSize="256m"  classpathref="project.classpath">
	<src path="${src.dir}"/>
	<src path="${test.dir}"/>
	<compilerarg line="-XDignore.symbol.file -encoding GBK"/> 
	<!--<compilerarg value="-Xlint:unchecked" />-->
	<!--<compilerarg value="-Xlint:deprecation" />-->
	<!--<compilerarg line = "-source 1.6"/> -->

	<!--<classpath refid="tomcat.classpath" /> -->
	<classpath refid="project.classpath" />
</javac>
<copy encoding="GBK" todir="${build.dir}/" >
	<fileset dir="${webRoot.dir}/WEB-INF">   <!-- 拷貝WEB-INF下的所有以XML,tld,dtd爲後綴的文件   -->
		<include name="**/*.xml" />
		<include name="**/*.tld" />	
		<include name="**/*.dtd" />
	</fileset>	
</copy>
	<copy encoding="GBK" todir="${build.dir}/" > <!--拷貝WEB-INF下的所有文件夾至build中 -->
		<fileset dir="${webRoot.dir}/">
			<exclude name="WEB-INF"/>
		</fileset>	
	</copy>
<copy encoding="GBK" todir="${build.dir}/classes" >
<fileset dir="${src.dir}">
	<include name="**/*.xml" />
	<include name="**/*.properties" />
	<include name="**/*.png" />	
	<include name="**/*.dtd" />
</fileset>

<fileset dir="${config.dir}">
	<include name="**/*.xml" />
	<include name="**/*.properties" />
	<include name="**/*.dtd" />	
</fileset>

<!-- 關鍵點,這裏類似 maven profile  根據build.properties 裏面的值 來變動-->
<!--<fileset dir="${config.dir}/${env}">
		<include name="**/*.properties" />
	</fileset>-->
</copy>
<echo message="end compile..." />
</target>


		
<!-- JUNIT測試任務,單元測試-->	
<target name="junit" depends="compile">
	<echo message="begin junitTest..." />
	
	<!-- 配置測試時CLASSPAth-->
	<!-- <path id="run_test_path">
		<fileset dir="lib.dir">
			<include name="**/*.jar"/>
		</fileset>
		<pathelement path="${build.dir}/classes"/>
	</path>  -->
	<!--執行測試 -->
	<junit printsummary="yes" haltonfailure="no" showoutput="true" >
		<!--配置運行時classpath-->
		<!--<classpath refid="run_test_path"/>-->
		<classpath>
			<fileset dir="${lib.dir}">
				<include name="**/*.jar"/>
			</fileset>	
				<pathelement location="${build.dir}/classes"/>
		</classpath>
		<!--測試報告以文本的形式生成,type配置成xml,以xml形式生成測試報告  -->
		<formatter type="xml" usefile="true"/>       <!-- usefile="true" 可以得到相應的Test-*.XML文件-->
		<batchtest fork="yes" todir="${junit-report}"> <!--測試結果生成到指定目錄 -->
			<fileset dir="${build.dir}/classes"> 
				<include name="**/*Test.*"/>
			</fileset>
		</batchtest>
	</junit>	
	<!--生成html報告-->
		<junitreport todir="${junit-report}">
			<fileset dir="${junit-report}">
				<include name="TEST-*.xml"/>
			</fileset>
			<report format="frames" todir="${junit-report}"/>
		</junitreport>
	<echo message="end junitTest..." />
	<echo message="當前測試報告目錄------>${junit-report}" /> 
</target>
	
	<!-- 打成war包, 名稱默認爲 項目名 -->
	<target name="warFile" depends="junit" description="將工程打成war包">
	<echo message="begin war..." />
	<war destfile="${dist.dir}/${webapp.name}.war" basedir="${webRoot.dir}" webxml="${webRoot.dir}/WEB-INF/web.xml">
	<lib dir="${lib.dir}" />
	<classes dir="${build.dir}/classes" />
	<fileset dir="${webRoot.dir}">
	<include name="***.*" />
	</fileset>
	</war>
	<echo message="end war..." />
	</target>
	
</project>

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

圖二:是WebRoot的目錄結構:

圖三:是對應自動生成 的build文件:

圖四:是兩個單元測試的類,測試類

圖五:生成的自動測試報告

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