程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 集成使用cobertura和tomcat

集成使用cobertura和tomcat

編輯:關於JAVA

注意點

需要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>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved