天天看点

cobertura-1.9.4.1结合tomcat生成测试报告

1. 下载 cobertura-1.9.4.1.zip

2. 将cobertura.jar、lib下的jar包copy到$TOMCAT_HOME/lib下。

3. 将coberturaFlush.war copy到$TOMCAT_HOME/webapps下。

4. 编写build.properties

# The source code for the examples can be found in this directory
src.dir=/home/a/project/src/mbr_luna_subway_20120221_jan/subway-biz/src
# The path to cobertura.jar
cobertura.dir=/home/a/project/cobertura-1.9.4.1

# Classes generated by the javac compiler are deposited in this directory
classes.dir=/home/a/project/subway-bizservice/WEB-INF/classes

# Instrumented classes are deposited into this directory
instrumented.dir=/home/a/project/src/bak

# All reports go into this directory
reports.dir=/home/a/project/result

# Coverage reports are deposited into these directories
coverage.html.dir=${reports.dir}/cobertura-html

#server.bin.dir=/usr/local/dev-tomcat2.0-api-mobile/bin
server.bin.dir=/home/a/project/tomcattop_bserv/bin

serName=cobertura.ser

#flush url
flush.url=http://10.232.132.58:47080/coberturaFlush/flushCobertura


coverage.xml.dir=${reports.dir}/cobertura-xml
coverage.summaryxml.dir=${reports.dir}/cobertura-summary-xml
coverage.html.dir=${reports.dir}/cobertura-html      

   注意:flush.url 是你要测试的tomcat下对应的coberturaFlush.war中的servlet

5.编写build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="cobertura.examples.basic" default="coverage-report" basedir=".">

	<description>
    Cobertura - http://cobertura.sourceforge.net/
    Copyright (C) 2003 jcoverage ltd.
    Copyright (C) 2005 Mark Doliner &lt;[email protected]&gt;
    Cobertura is licensed under the GNU General Public License
    Cobertura comes with ABSOLUTELY NO WARRANTY
    </description>

	<property file="build.properties" />

	<path id="cobertura.classpath">
		<fileset dir="${cobertura.dir}">
			<include name="*.jar" />
			<include name="lib/*.jar"/>
		</fileset>
	</path>

	<taskdef classpathref="cobertura.classpath" target="_blank" rel="external nofollow"  resource="tasks.properties"/>

	<target name="init">
		<mkdir dir="${classes.dir}" />
		<mkdir dir="${instrumented.dir}" />
		<mkdir dir="${coverage.xml.dir}" />
		<mkdir dir="${coverage.html.dir}" />
	</target>

	<target name="instrument" depends="init">
		<!--
			Remove the coverage data file and any old instrumentation.
		-->
		<delete file="${serName}"/>
	

		<!--
			Instrument the application classes, writing the
			instrumented classes into ${build.instrumented.dir}.
		-->
		<cobertura-instrument todir="${instrumented.dir}" datafile="${serName}">
			<!--
				The following line causes instrument to ignore any
				source line containing a reference to log4j, for the
				purposes of coverage reporting.
			-->
			<ignore regex="org.apache.log4j.*" />

			<fileset dir="${classes.dir}">
				<!--
					Instrument all the application classes, but
					don't instrument the test classes.
				-->
				<include name="**/*.class" />
			</fileset>
		</cobertura-instrument>

		<copy todir="${classes.dir}" overwrite="true">
          <fileset dir="${instrumented.dir}">
            <include name="**/*.class"/>
          </fileset>
        </copy>

		<copy file="${serName}" todir="${server.bin.dir}"  overwrite="true" />
	</target>

	<target name="coverage-report" depends="merge">
		<!--
			Generate an XML file containing the coverage data using
			the "srcdir" attribute.
		-->
		<cobertura-report  datafile="total.ser" srcdir="${src.dir}" destdir="${coverage.html.dir}" format="html" />
	</target>
	
	<!--flush data to serfile-->
	<target name="flush" >
		<get src="${flush.url}" dest="log.txt"/>
		<sleep milliseconds="3000"/>
	</target>

	<target name="alternate-coverage-report">
		<!--
			Generate a series of HTML files containing the coverage
			data in a user-readable form using nested source filesets.
		-->
		<cobertura-report destdir="${coverage.html.dir}">
			<fileset dir="${src.dir}">
				<include name="**/*.java"/>
			</fileset>
		</cobertura-report>
	</target>

	<target name="merge" depends="flush">
		<copy todir="${basedir}" overwrite="true">
          <fileset dir="${server.bin.dir}">
            <include name="**/*.ser"/>
          </fileset>
        </copy>

	   <cobertura-merge datafile="total.ser">	   	
        <fileset dir="${basedir}">
           <include name="*.ser"/>
       </fileset>
     </cobertura-merge>
		<echo message="merge file"/>
   </target>

	<target name="clean" description="Remove all files created by the build/test process.">
		<delete dir="${classes.dir}" />
		<delete dir="${instrumented.dir}" />
		<delete dir="${reports.dir}" />
		<delete file="cobertura.log" />
		<delete file="cobertura.ser" />
	</target>

</project>
      

6. 运行命令ant。原理:

   1)将待统计的代码的class文件重新生成class,添加了统计代码的代码。

   2) 运行测试用例时,会将内容统计到$TOMCAT_HOME/bin/cobertura.ser中。

   3) 运行结束之后,通过调用http://10.232.132.58:47080/coberturaFlush/flushCobertura,将serverlet中统计到的信息序列化到cobertura.ser文件中。

   4) 最后通过cobertura-report.sh 这个命令生成报告。

7. 运行测试用例。

8. 重新运行ant命令,生成测试报告。

继续阅读