注意點
需要Copy cobertura.jar及其LIB到TOMCAT/COMMON/LIB:
只有當TOMCAT關閉的時候,才會寫cobertura.ser文件
步驟
start up tomcat
build war
deploy web application
web test
undeploy
shut down
coverage report
附build.xml
<project name="KSystem" default="smoketest" basedir=".">
<property environment="env"/>
<property name="checkstyle.dir" value="${env.CHECKSTYLE_HOME}" />
<path id="checkstyle.classpath">
<fileset dir="${checkstyle.dir}">
<include name="checkstyle-all-4.1.jar" />
</fileset>
</path>
<property name="cobertura.dir" value="${env.COBERTURA_HOME}" />
<path id="cobertura.classpath">
<fileset dir="${cobertura.dir}">
<include name="cobertura.jar" />
</fileset>
</path>
<taskdef name="jcsc" classname="rj.tools.jcsc.ant.JCSCTask" classpath="${env.JCSC_HOME}/lib/jcsc.jar" />
<taskdef resource="checkstyletask.properties" classpathref="checkstyle.classpath" />
<taskdef classpathref="cobertura.classpath" resource="tasks.properties" />
<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpath="${env.PMD_HOME}/lib/pmd-3.7.jar"/>
<!-- master build -->
<property name="project.dir" value="${basedir}" />
<property name="project.lib.dir" value="${project.dir}/WEB-INF/lib" />
<property name="build.dir" value="${basedir}/build" />
<property name="out.dir" value="${build.dir}" />
<property name="out.file.name" value="${ant.project.name}" />
<property name="classes.dir" value="${out.dir}/classes" />
<property name="src.dir" value="${project.dir}/src" />
<property name="webtests.dir" value="${project.dir}/webtests" />
<property name="instrumented.dir" value="${out.dir}/instrumented" />
<property name="cvs.repository" value=":pserver:ci:[email protected]:/KSystem"/>
<property name="cvs.package" value="${ant.project.name}"/>
<target name="checkout">
<cvs command="update -d -P"/>
</target>
<target name="qa.build" description="build java file including cobertura for coverage test">
<javac target="1.4"
source="1.4"
destdir="${classes.dir}"
debug="yes"
encoding="utf-8">
<src path="${src.dir}" />
<src path="${tests.dir}" />
<include name="**/*.java" />
<classpath refid="compile.classpath"/>
<include name="${cobertura.path}" />
<!-- when i need do QA, the classpath is need, otherwise, donot include the classpath -->
<classpath refid="cobertura.classpath" />
</javac>
<copy todir="${classes.dir}">
<fileset dir="${src.dir}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="initdir">
<delete dir="${reports.jcsc.dir}" />
<delete dir="${reports.jcsc.dir}/xsl" />
<delete dir="${reports.checkstyle.dir}" />
<delete dir="${reports.cobertura.dir}" />
<delete dir="${reports.cobertura.xml.dir}" />
<delete dir="${reports.cobertura.html.dir}" />
<delete dir="${reports.junit.dir}" />
<delete dir="${reports.junit.html.dir}" />
<delete dir="${reports.junit.xml.dir}" />
<delete dir="${reports.pmd.dir}" />
<delete dir="${reports.pmd.xml.dir}" />
<delete dir="${reports.dir}"/>
<delete dir="${out.dir}" />
<delete dir="${classes.dir}" />
<mkdir dir="${out.dir}" />
<mkdir dir="${classes.dir}" />
<mkdir dir="${reports.dir}" />
<mkdir dir="${reports.jcsc.dir}" />
<mkdir dir="${reports.jcsc.dir}/xsl" />
<copy todir="${reports.jcsc.dir}/xsl">
<fileset dir="${env.JCSC_HOME}/html/xml/xsl" />
</copy>
<mkdir dir="${reports.checkstyle.dir}" />
<mkdir dir="${reports.cobertura.dir}" />
<mkdir dir="${reports.cobertura.xml.dir}" />
<mkdir dir="${reports.cobertura.html.dir}" />
<mkdir dir="${reports.junit.dir}" />
<mkdir dir="${reports.junit.html.dir}" />
<mkdir dir="${reports.junit.xml.dir}" />
<mkdir dir="${reports.pmd.dir}" />
<mkdir dir="${reports.pmd.xml.dir}" />
</target>
<property name="tomcat.manager.url" value="" />
<property name="tomcat.username" value="admin" />
<property name="tomcat.password" value="admin" />
<property name="webapp.name" value="${ant.project.name}" />
<property name="tomcat.home" value="${env.CATALINA_HOME}" />
<target name="tomcat.startup">
<exec executable="${tomcat.home}/bin/startup.bat" />
</target>
<target name= "tomcat.shutdown">
<exec executable="${tomcat.home}/bin/shutdown.bat" />
</target>
<property file="tomcatTasks.properties" />
<taskdef file="tomcat.properties">
<classpath>
<pathelement path="${tomcat.home}/server/lib/catalina-ant.jar"/>
</classpath>
</taskdef>
<target name="tomcat.deploy" description="Install application in Tomcat">
<deploy url="${tomcat.manager.url}"
username="${tomcat.username}"
password="${tomcat.password}"
path="/${webapp.name}"
war="file:${out.dir}/${out.file.name}.war"/>
</target>
<target name="tomcat.undeploy" description="Remove application in Tomcat">
<undeploy url="${tomcat.manager.url}"
username="${tomcat.username}"
password="${tomcat.password}"
path="/${webapp.name}"/>
</target>
<!-- make report-->
<property name="reports.dir" value="${out.dir}/reports" />
<property name="reports.jcsc.dir" value="${reports.dir}/jcsc" />
<property name="jcscrules.path" value="${env.JCSC_HOME}/rules/genie.jcsc.xml" />
<property name="reports.checkstyle.dir" value="${reports.dir}/checkstyle" />
<property name="checksytlerule.path" value="${env.CHECKSTYLE_HOME}/sun_checks.xml" />
<property name="reports.cobertura.dir" value="${reports.dir}/coverage" />
<property name="reports.cobertura.xml.dir" value="${reports.cobertura.dir}/xml" />
<property name="reports.cobertura.html.dir" value="${reports.cobertura.dir}/html" />
<property name="reports.junit.dir" value="${reports.dir}/junit" />
<property name="reports.junit.xml.dir" value="${reports.junit.dir}/xml" />
<property name="reports.junit.html.dir" value="${reports.junit.dir}/html" />
<property name="reports.pmd.dir" value="${reports.dir}/pmd" />
<property name="reports.pmd.xml.dir" value="${reports.pmd.dir}/xml" />
<property name="out.junit.textType" value="xml" />
<target name="junitreport" description="generate reports of junit">
<junitreport todir="${reports.junit.xml.dir}">
<fileset dir="${reports.junit.xml.dir}">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="${reports.junit.html.dir}" />
</junitreport>
</target>
<target name="jcscreport">
<jcsc rules="${jcscrules.path}" destdir="${reports.jcsc.dir}">
<fileset dir="${src.dir}" includes="**/*.java"/>
</jcsc>
</target>
<target name="checkstylereport" >
<property name="checkstylereport.path" value="${reports.checkstyle.dir}/checkstyle_report.xml" />
<checkstyle config="${checksytlerule.path}"
failureProperty="checkstyle.failure"
failOnViolation="false">
<formatter type="xml" tofile="${checkstylereport.path}"/>
<fileset dir="src" includes="**/*.java"/>
</checkstyle>
</target>
<target name="pmd">
<pmd shortFilenames="true">
<ruleset>rulesets/favorites.xml</ruleset>
<ruleset>basic</ruleset>
<formatter type="xml" toFile="${reports.pmd.xml.dir}/pmd.xml" />
<fileset dir="${src.dir}">
<include name="**/*.java"/>
</fileset>
</pmd>
</target>
<target name="instrument">
<delete file="cobertura.ser"/>
<delete dir="${instrumented.dir}" />
<mkdir dir="${instrumented.dir}" />
<cobertura-instrument todir="${instrumented.dir}">
<ignore regex="org.apache.log4j.*" />
<fileset dir="${classes.dir}">
<include name="**/*.class" />
<exclude name="**/*Test.class" />
<exclude name="**/AllTests.class" />
</fileset>
</cobertura-instrument>
<copy todir="${instrumented.dir}">
<fileset dir="${classes.dir}">
<exclude name="**/*.class"/>
</fileset>
</copy>
</target>
<target name="coverage-check">
<cobertura-check branchrate="34" totallinerate="100" />
</target>
<target name="coverage-report">
<cobertura-report srcdir="${src.dir}" destdir="${reports.cobertura.xml.dir}" format="xml" />
</target>
<target name="alternate-coverage-report">
<cobertura-report destdir="${reports.cobertura.html.dir}">
<fileset dir="${src.dir}">
<include name="**/*.java"/>
</fileset>
</cobertura-report>
</target>
<!-- for this project -->
<path id="compile.classpath">
<fileset dir="${project.lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<path id="web.compile.classpath">
<fileset dir="${env.TOMCAT_HOME}/webapps/${ant.project.name}/WEB-INF/classes">
<include name="**/*.class" />
</fileset>
</path>
<!-- smoke test -->
<target name="unittest" depends="qa.build" description="unit test using nunit">
<!-- target unittest.overide means the a project can selfdefine itself's unit target, the test depends some special conditions.
that a project, which would build the unittest project, defines a unittest.override, so, i will call the unittest.override target,
instead of unittest -->
<junit fork="yes" dir="${basedir}" failureProperty="test.failed" >
<classpath location="${instrumented.dir}" />
<classpath location="${classes.dir}" />
<classpath refid="compile.classpath" />
<classpath refid="cobertura.classpath" />
<formatter type="${out.junit.textType}"/>
<batchtest fork="yes" todir="${reports.junit.xml.dir}" >
<fileset dir="${tests.dir}">
<include name="**/*Test.java"/>
</fileset>
</batchtest>
</junit>
</target>
<target name="smoketest" >
<property name="tests.dir" value="${project.dir}/tests" />
<antcall target="checkout"></antcall>
<antcall target="initdir"></antcall>
<antcall target="qa.build"></antcall>
<antcall target="instrument"></antcall>
<antcall target="unittest"></antcall>
<antcall target="junitreport"></antcall>
<antcall target="coverage-report"></antcall>
<antcall target="alternate-coverage-report"></antcall>
<antcall target="jcscreport"></antcall>
<antcall target="checkstylereport"></antcall>
<antcall target="pmd"></antcall>
</target>
<!-- system test -->
<target name="webtest">
<junit fork="yes" dir="${basedir}" failureProperty="test.failed" >
<classpath location="${classes.dir}" />
<classpath location="${tomcat.home}/webapps/${ant.project.name}/WEB-INF/classes" />
<classpath refid="compile.classpath" />
<classpath refid="cobertura.classpath" />
<formatter type="${out.junit.textType}"/>
<batchtest fork="yes" todir="${reports.junit.xml.dir}" >
<fileset dir="${tests.dir}">
<include name="**/*Test.java"/>
</fileset>
</batchtest>
</junit>
</target>
<target name="buildwar">
<property name="jsp.dir" value="${project.dir}/jsp" />
<war destfile="${out.dir}/${out.file.name}.war" webxml="${project.dir}\WEB-INF\web.xml">
<fileset dir="${jsp.dir}">
<include name="**/*.jsp" />
<include name="**/*.html" />
<include name="**/*.htm"/>
</fileset>
<webinf dir="${project.dir}\WEB-INF">
<exclude name="${project.dir}\WEB-INF\web.xml" />
</webinf>
<classes dir="${out.dir}/classes" />
</war>
</target>
<target name="systemtest">
<property name="tests.dir" value="${project.dir}/webtests" />
<antcall target="checkout"></antcall>
<parallel threadCount="2">
<ant target="tomcat.startup" />
<sequential>
<sleep seconds="4"/>
<antcall target="initdir"></antcall>
<antcall target="qa.build"></antcall>
<antcall target="instrument"></antcall>
<antcall target="buildwar"></antcall>
<antcall target="tomcat.deploy"></antcall>
<antcall target="webtest"></antcall>
<antcall target="tomcat.undeploy"></antcall>
<antcall target="tomcat.shutdown"></antcall>
<antcall target="junitreport"></antcall>
<antcall target="coverage-report"></antcall>
<antcall target="alternate-coverage-report"></antcall>
<antcall target="jcscreport"></antcall>
<antcall target="checkstylereport"></antcall>
<antcall target="pmd"></antcall>
</sequential>
</parallel>
<delete dir="${tomcat.home}/webapps/${webapp.name}" />
</target>
</project>