`
liyixing1
  • 浏览: 961514 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

cobertura做测试覆盖率 ant的配置

 
阅读更多
cobertura原理大致如下:
首先修改我们编译后的class文件,再代码里面加入cobertura的统计代码。
然后运行我们的测试类,(那些统计代码会进行添加信息到ser文件)。

注意,Test类本身不能继承其他类,否则会报错。

cobertura下载
http://cobertura.sourceforge.net

下载解压



下载完成后添加
COBERTURA_HOME环境变量



以及设置path



例子


我的项目上如结构

第一步要做的是告诉cobertura去修改class文件
进入到项目目录
执行
E:\java\junit>cobertura-instrument --destination instrumented bin\test
会对bin\test下面的所有文件进行修改。修改后的文件放入instrumented目录(--destination参数指定存放修改后的class文件所在目录)
并生成ser文件。

E:\java\junit>java -cp lib\*;%COBERTURA_HOME%\cobertura.jar;instrumented;bin -Dne
t.sourceforge.cobertura.datafile=cobertura.ser org.junit.runner.JUnitCore test.C
alculatorTest

其中-Dne
t.sourceforge.cobertura.datafile=cobertura.ser指定测试信息写入到cobertura.ser档案文件。

生成报表
E:\java\junit>cobertura-report --format html --datafile cobertura.ser --destination reports src

--destination reports src指定报表文件存放在reports目录,源码文件从src中读取。

另外如果是使用utf-8编码的话,可能会出现如下错误

net.sourceforge.cobertura.javancss.parser.TokenMgrError: Lexical error at line 1
2, column 61.  Encountered: "\r" (13), after : "\"\u7f01\u64b4\u7049\u6d93\u5d86
\ue11c\u7ead\ufffd, result,1, 0);"
        at net.sourceforge.cobertura.javancss.parser.JavaParserTokenManager.getN
extToken(JavaParserTokenManager.java:2078)
        at net.sourceforge.cobertura.javancss.parser.JavaParser.jj_scan_token(Ja
vaParser.java:10181)
        at net.sourceforge.cobertura.javancss.parser.JavaParser.jj_3R_198(JavaPa
rser.java:8524)
这需要为文件指定默认编码。也就是加入-Dfile.encoding=utf-8 参数
修改cobertura-report.bat文件,更改

java -cp "%COBERTURA_HOME%cobertura.jar;%COBERTURA_HOME%lib\asm-3.0.jar;%COBERTURA_HOME%lib\asm-tree-3.0.jar;%COBERTURA_HOME%lib\log4j-1.2.9.jar;%COBERTURA_HOME%lib\jakarta-oro-2.0.8.jar"  net.sourceforge.cobertura.reporting.Main %CMD_LINE_ARGS%




java -cp "%COBERTURA_HOME%cobertura.jar;%COBERTURA_HOME%lib\asm-

3.0.jar;%COBERTURA_HOME%lib\asm-tree-3.0.jar;%COBERTURA_HOME%

lib\log4j-1.2.9.jar;%COBERTURA_HOME%lib\jakarta-oro-2.0.8.jar" -

Dfile.encoding=utf-8 net.sourceforge.cobertura.reporting.Main %

CMD_LINE_ARGS%

成功后进入reports目录,打开index.html就能看到相关的测试信息。








ant
<?xml version="1.0" encoding="utf-8" ?>

<project name="superschool" default="all" basedir=".">
<property environment="env" />
<property name="projectName" value="superschool" />
<property name="src.dir" value="src/main/java" />
<property name="resource.dir" value="resource" />
<property name="build.dir" value="build" />
<property name="build.classes" value="${build.dir}/classes" />
<property name="webroot.dir" value="WebContent" />
<property name="lib.dir" value="${webroot.dir}/WEB-INF/lib" />
<property name="lib.test.dir" value="test_lib" />
<property name="compiler.lib.dir" value="compiler_lib" />
<property name="target.dir" value="${build.dir}/target" />
<property name="target.app" value="${build.dir}/target/${projectName}" />
<property name="deploy.dir" value="${user.home}/${projectName}/webapp" />

<path id="class.path">
<pathelement location="${build.classes}" />
<fileset dir="${lib.dir}" includes="**/*.jar" />
<fileset dir="${compiler.lib.dir}" includes="**/*.jar" />
<fileset dir="${lib.test.dir}" includes="**/*.jar">
</fileset>
</path>

<target name="clean" description="清理应用">
<description>
清理应用的build目录
</description>

<echo message="开始清理应用" />

<tstamp>
<format property="starttime_clean" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>

<echo message="开始时间:${starttime_clean}" />

<delete dir="${build.dir}" />
<delete dir="${deploy.dir}" />

<tstamp>
<format property="endtime_clean" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>

<echo message="应用清理完毕" />

<echo message="结束时间:${endtime_clean}" />
<echo message="------------------------------" />
<echo message="" />
</target>

<target name="compiler" description="编译项目">
<description>
编译项目
compiler.lib.dir特性指向的目录是存放编译需要的架包,
这个目录里面的架包是不会放到部署目录的lib目录的。
</description>

<tstamp>
<format property="starttime_compiler" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>

<echo message="开始编译" />
<echo message="开始时间:${starttime_compiler}" />

<mkdir dir="${build.dir}" />
<mkdir dir="${build.classes}" />

<!--编译源文件-->
<javac srcdir="${src.dir}" destdir="${build.classes}" debug="true" encoding="utf-8">
<classpath refid="class.path" />
</javac>

<!--拷贝配置文件-->
<copy todir="${build.classes}">
<fileset dir="${resource.dir}">
<exclude name="**/*.class" />
<exclude name="**/*.java" />
<exclude name="**/jdbc.properties" />
<exclude name="**/log4j.xml" />
</fileset>
</copy>

<property name="begintoken" value="$" />

<!--配置文件properties的antx功能-->
<copy encoding="utf-8" todir="${build.classes}/com/superschool/resource/spring/properties/jdbc">
<fileset dir="config">
<include name="jdbc.properties" />
</fileset>

<!--定义拷贝替换过滤器-->
<filterset begintoken="${begintoken}{" endtoken="}">
<filtersfile file="${user.home}/${projectName}/antx.properties" />
</filterset>
</copy>

<copy encoding="utf-8" todir="${build.classes}/com/superschool/resource/log4j">
<fileset dir="config">
<include name="log4j.xml" />
</fileset>

<filterset begintoken="${begintoken}{" endtoken="}">
<filtersfile file="${user.home}/${projectName}/antx.properties" />
</filterset>
</copy>

<tstamp>
<format property="endtime_compiler" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>

<echo message="编译成功结束" />
<echo message="结束时间:${endtime_compiler}" />
<echo message="------------------------------" />
<echo message="" />
</target>

<target name="make-app" description="生成项目文件夹">
<tstamp>
<format property="starttime_make-app" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>

<echo message="开始生成app" />
<echo message="开始时间:${starttime_make-app}" />

<mkdir dir="${target.app}" />
<mkdir dir="${target.app}/WEB-INF/lib" />
<mkdir dir="${target.app}/WEB-INF/classes" />

<!--拷贝app的WebContent目录到下面的文件到项目目录-->
<copy todir="${target.app}">
<fileset dir="${webroot.dir}" />
</copy>

<!--拷贝app的classes目录到下面的文件到项目目录的classes-->
<copy todir="${target.app}/WEB-INF/classes">
<fileset dir="${build.classes}">
<include name="**/**" />
</fileset>
</copy>

<!--拷贝app的lib目录到下面的文件到项目目录的lib-->
<copy todir="${target.app}/WEB-INF/lib">
<fileset dir="${lib.dir}" includes="**/*.jar" />
</copy>

<tstamp>
<format property="endtime_make-app" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>

<echo message="app生成结束" />
<echo message="结束时间:${endtime_make-app}" />
<echo message="------------------------------" />
<echo message="" />
</target>

<target name="test" if="test">
<property name="cobertura.home" value="${env.COBERTURA_HOME}" />
<property name="src.test.dir" value="src/test/java" />
<property name="test.report.dir" value="${user.home}/${projectName}/test/report" />
<property name="test.report.html" value="${user.home}/${projectName}/test/report/html" />
<property name="cobertura.dir" value="${user.home}/${projectName}/test/cb" />

<path id="class.test.path">
<fileset dir="${lib.test.dir}" includes="**/*.jar">
</fileset>
</path>

<!--代码测试覆盖率配置class路径-->
<path id="class.cobertura.path">
<fileset dir="${cobertura.home}">
<include name="cobertura.jar" />
<include name="lib/**/*.jar" />
</fileset>
</path>

<delete dir="${test.report.dir}" />
<delete dir="${test.report.html}" />
<delete file="${cobertura.dir}" />
<mkdir dir="${test.report.dir}" />
<mkdir dir="${test.report.html}" />
<mkdir dir="${cobertura.dir}" />

<!--代码覆盖率-->
<taskdef classpathref="class.cobertura.path" resource="tasks.properties" />

<tstamp>
<format property="starttime_test_cobertura" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>

<echo message="开始生成测试代码覆盖率" />
<echo message="开始时间:${starttime_test_cobertura}" />

<cobertura-instrument todir="${build.classes}">
<ignore regex="org.apache.log4j.*" />

<fileset dir="${build.classes}">
<include name="**/*.class" />
<exclude name="**/*Test*.class" />
</fileset>
</cobertura-instrument>

<tstamp>
<format property="endtime_test_cobertura" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>

<echo message="测试代码覆盖率生成结束" />
<echo message="结束时间:${endtime_test_cobertura}" />
<echo message="------------------------------" />
<echo message="" />


<!--编译测试类-->
<tstamp>
<format property="starttime_test_compiler" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>

<echo message="开始编译测试代码" />
<echo message="开始时间:${starttime_compiler}" />

<javac srcdir="${src.test.dir}" destdir="${build.classes}" debug="true" encoding="utf-8">
<classpath refid="class.path" />
<classpath refid="class.test.path" />
</javac>

<tstamp>
<format property="endtime_test_compiler" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>

<echo message="编译测试代码结束" />
<echo message="结束时间:${endtime_test_compiler}" />
<echo message="------------------------------" />
<echo message="" />

<!--运行测试-->
<tstamp>
<format property="starttime_test_run" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>
<echo message="开始运行测试代码" />
<echo message="开始时间:${starttime_test_run}" />
<!--此处必须让fork=yes,在一个新的vm中运行,否则,需要运行该build文件两次才能得到cobertura的html报表-->
<junit fork=yes printsummary="yes" haltonerror="yes" haltonfailure="yes" fork="no">
<formatter type="plain" usefile="false" />
<formatter type="xml" usefile="true" />

<batchtest todir="${test.report.dir}">
<fileset dir="${src.test.dir}">
<include name="**/Test*.java" />
</fileset>
</batchtest>

<classpath refid="class.path" />
<classpath refid="class.test.path" />
<classpath refid="class.cobertura.path">
</classpath>
</junit>

<!--<junit printsummary="yes" haltonerror="yes" haltonfailure="yes" fork="yes">
<formatter type="xml" />
<test name="s.A" todir="${test.report.dir}" />
<classpath refid="class.path" />
</junit>-->

<tstamp>
<format property="endtime_test_run" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>

<echo message="运行测试代码结束" />
<echo message="结束时间:${endtime_test_run}" />
<echo message="------------------------------" />
<echo message="" />

<!--生成报表-->
<tstamp>
<format property="starttime_test_html" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>
<echo message="开始生成测试报表" />
<echo message="开始时间:${starttime_test_html}" />
<mkdir dir="${test.report.html}" />

<junitreport todir="${test.report.dir}">
<fileset dir="${test.report.dir}">
<include name="TEST-*.xml" />
</fileset>
<report todir="${test.report.dir}/html" />
</junitreport>

<tstamp>
<format property="endtime_test_html" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>

<echo message="生成测试报表结束" />
<echo message="结束时间:${endtime_test_html}" />
<echo message="------------------------------" />
<echo message="" />

<tstamp>
<format property="starttime_cobertura_report_html" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>
<echo message="开始生成测试覆盖率报表" />
<echo message="开始时间:${starttime_cobertura_report_html}" />
<mkdir dir="${test.report.html}" />

<cobertura-report srcdir="${src.dir}" destdir="${cobertura.dir}" format="html" />

<!--删除报表主文件-->
<delete file="cobertura.ser">
</delete>
<tstamp>
<format property="endtime_cobertura_report_html" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>

<echo message="生成测试覆盖率报表结束" />
<echo message="结束时间:${endtime_cobertura_report_html}" />
<echo message="------------------------------" />
<echo message="" />


</target>

<target name="deploy" description="部署应用">
<tstamp>
<format property="starttime_deploy" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>

<echo message="开始部署" />
<echo message="开始时间:${starttime_deploy}" />

<delete dir="${deploy.dir}" />
<mkdir dir="${deploy.dir}" />

<copy todir="${deploy.dir}">
<fileset dir="${target.app}" />
</copy>

<echo message="部署结束" />

<tstamp>
<format property="endtime_deploy" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>

<echo message="结束时间:${endtime_deploy}" />
<echo message="------------------------------" />
<echo message="" />
</target>

<target name="all" description="所有操作" depends="clean, compiler, make-app, deploy, test">
<echo message="所有任务完成" />
</target>
</project>
  • 大小: 73.6 KB
  • 大小: 14 KB
  • 大小: 3.9 KB
  • 大小: 46.7 KB
分享到:
评论

相关推荐

    Junit+ant+cobertura示例

    Cobertura是一款用于Java代码覆盖率工具,它可以度量代码被单元测试覆盖的程度。代码覆盖率是衡量测试质量的重要指标,Cobertura可以显示哪些类、方法、行和条件未被测试。通过Cobertura,开发者可以了解代码的测试...

    Java测试覆盖率工具cobertura1.9

    将Cobertura与Ant结合,开发者可以在执行Ant构建时轻松地添加测试覆盖率检查,无需额外的复杂设置。 Cobertura的使用步骤大致如下: 1. 下载:首先,你需要从官方网站或者提供的压缩包中下载Cobertura的对应版本,...

    cobertura-2.1.1测试案例覆盖率统计工具

    6. **持续集成**:如果你的项目使用了像Jenkins或Travis CI这样的持续集成服务器,你可以配置它们在每次构建时运行Cobertura,以便持续监控测试覆盖率的变化。 总之,Cobertura作为一款强大的测试覆盖率工具,为...

    cobertura1.9.1

    它能够帮助开发者测量和报告程序代码的测试覆盖率,即多少代码被单元测试执行过。这对于确保软件的质量和可靠性至关重要,因为未经过测试的代码可能会隐藏潜在的错误。 在描述中提到的"ant+junit+cobertura的build....

    cobertura

    在压缩包中的“Eclipse中Ant的配置与测试.doc”文档,很可能是详细教程,指导读者如何在Eclipse中设置Ant任务来运行Cobertura并生成覆盖率报告。通常,这会涉及到以下步骤: 1. 安装Cobertura插件:在Eclipse中,...

    cobertura 1.9.4.1

    **Cobertura 1.9.4.1:单元测试覆盖率工具详解** Cobertura 是一个开源的 Java 代码覆盖率工具,主要用于衡量软件项目中单元测试的覆盖程度。版本 1.9.4.1 是该工具的一个稳定版本,它为开发者提供了详细的信息,...

    自动化测试系列五 ANT

    此外,ANT可以生成测试覆盖率报告,如Cobertura或JaCoCo,帮助开发者了解测试覆盖了多少代码。这对于优化测试策略,确保所有关键路径都被测试到,非常有帮助。 在实际应用中,ANT还可以与其他工具如Maven或Gradle...

    Java Cobertura

    其中,测试覆盖率是衡量代码质量的关键指标之一。Cobertura是一款开源的Java代码覆盖率工具,它能够帮助开发者了解哪些部分的代码已经被测试覆盖,哪些部分还需要进一步编写测试用例。 #### 二、Cobertura简介 ...

    cobertura-1.9.4.1-src.zip

    Cobertura是一款开源的Java代码覆盖率工具,它用于测量Java程序单元测试的覆盖率。这个"cobertura-1.9.4.1-src.zip"压缩包包含的是Cobertura 1.9.4.1版本的源代码。源代码是任何软件开发的基础,它允许开发者深入...

    cobertura-1.9.4.1-bin.zip

    Cobertura 是一个用于 Java 代码覆盖率测试的工具,它能够帮助开发者测量和跟踪他们的源代码有多少被单元测试覆盖。 在描述 "cobertura-1.9.4.1-bin.zip" 中,没有额外的具体信息,但我们可以推断这可能是一个 ZIP ...

    junit + ant 自动化测试

    同时,`JUnit`的测试结果可以被`Ant`记录并输出,以便于分析测试覆盖率和失败原因。这样的自动化测试流程不仅节省了手动测试的时间,还能帮助团队尽早发现和修复bug,提升代码质量。 为了进一步扩展这个demo,你...

    代码质量控制插件于eclipse3.4.2版本中的安装详解--coverlipse0.9.6

    Cobertura 也提供一个 Ant 任务和 Maven 插件,但用 Cobertura,您可以在编写代码时 评估代码覆盖率。您见过这样的模式吗? 通过选择 Eclipse 菜单项 Run 安装 Coverlipse 插件并将其和 JUnit 关联起来,该操作会...

    JUnit & Ant

    4. 覆盖率工具:结合JaCoCo或Cobertura,可以获取测试覆盖率报告,进一步提升测试质量。 总之,JUnit与Ant的结合使用能有效提高Java项目的测试效率和质量,通过自动化测试和构建,确保软件的稳定性和可靠性。同时,...

    jenkins插件

    同时,通过诸如 JaCoCo 和 Cobertura 这样的覆盖率工具,团队可以持续监控和改进测试覆盖率,确保代码质量。而 Dashboard View 插件则提供了项目管理和监控的强大视图,帮助团队保持对项目状态的清晰了解。

    持续集成工具Hudson入门介绍(结合Ant)

    8. **Hudson插件**:Hudson拥有丰富的插件生态系统,可以扩展其功能,例如,Junit插件用于显示测试结果,Cobertura插件用于代码覆盖率报告,SonarQube插件用于代码质量管理等。 通过以上步骤,你可以利用Hudson和...

    Cobertura for J2ME-开源

    Cobertura for J2ME是一款专为J2ME(Java 2 Micro Edition)平台设计的开源测试覆盖率分析工具。在软件开发过程中,测试覆盖率是一个重要的度量标准,它衡量了代码被执行的程度,可以帮助开发者了解测试套件对源代码...

    Juint 部署步骤

    - 修改`build.xml`文件,配置Cobertura任务,包括哪些类需要被测试,以及覆盖率报告的生成位置。 - 运行Ant脚本执行测试并生成覆盖率报告。 6. **运行测试** 一旦配置完成,你可以在Eclipse中右键点击测试类,...

    continuous integration with hudson

    - **代码覆盖率**:支持使用Cobertura等工具测量代码覆盖率,帮助评估测试覆盖度。 - **性能测试**:可以集成JMeter等工具进行自动化性能测试。 #### 五、总结 Hudson是一个功能强大的持续集成工具,通过其灵活的...

Global site tag (gtag.js) - Google Analytics