求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
单元测试报表以及覆盖率报表
 
作者 wangwenjun69 ,火龙果软件    发布于 2014-02-14
 

公司现在对单元测试越发的看重,这对减少上线之后bug的减少会带来很好的帮助,在笔者就职的公司里,在编写代码阶段,开发人员需要做如下一些事情:

1、checkstyle统一规范代码的格式,注释的数量。

2、junit进行代码的单元测试,并且在覆盖率上面有比较高的要求。

3、dailybuild结合上述两者并且外加findbugs。

4、除此之外,为了防止提交不合法的代码到SVN仓库,又做了SVN的控制,特意开发了SVN hooks,如果代码不符合checkstyle和单元测试,以及findbugs等要求,都会提交代码失败。

很开心项目组的这些工作我都有参与进去进行设计和进行具体的开发,今天就分享一下我写的一个很小的demo,主要是针对ant+junit进行单元测试以及生成测试报告,并且利用jacoco进行单元测试覆盖率的报告,其中ant+junit的组合想必很多人已经非常的熟悉了~这里就不再赘述,jacoco是一个比较优秀以及很强大的工具,如果大家有兴趣可以看看jacoco顺便研究一下sonar+jacoco+maven的组合。jacoco的下载地址为:http://www.eclemma.org/jacoco/

在本文中,我们就一个很小的工程进行一下上述三者的组合,让大家体验一下如何进行测试报告以及覆盖报告的生成。

1.build.properties文件

在开始编写build.xml之前,我们先定义一下build.properties文件

<span style="font-size:18px;">#Mon, 25 Nov 2013 12:08:58 +0800
src.dir=src
test.src.dir=test
build.dir=build
build.classes=${build.dir}/classes
build.test.dir=${build.dir}/test
build.test.classes=${build.test.dir}/classes
build.test.report=${build.dir}/report
build.test.report.coverage=${build.test.report}/coverage
junit.lib.dir=devlib
</span>

2.build.xml文件

<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<!-- ======================================================================
Nov 25, 2013 11:51:47 AM
project
description
clouder
====================================================================== -->
<project name="build" default="init" basedir="." xmlns:jacoco="antlib:org.jacoco.ant">
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="${basedir}/devlib/jacocoant.jar">
</classpath>
</taskdef>
<property file="build.properties">
</property>
<path id="compile-test-path">
<pathelement location="${build.classes}" />
<fileset dir="${junit.lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<path id="run-test-path">
<path refid="compile-test-path" />
<pathelement location="${build.test.classes}" />
</path>
<target name="init" depends="clean">
<mkdir dir="${build.dir}" />
<mkdir dir="${build.classes}" />
<mkdir dir="${build.test.dir}" />
<mkdir dir="${build.test.classes}" />
<mkdir dir="${build.test.report}" />
<mkdir dir="${build.test.report.coverage}" />
</target>
<target name="clean">
<delete dir="${build.dir}">
</delete>
</target>
<target name="src_compile" depends="init">
<javac srcdir="${src.dir}" destdir="${build.classes}" failonerror="true" verbose="true">
</javac>
</target>
<target name="test_compile" depends="src_compile">
<javac srcdir="${test.src.dir}" destdir="${build.test.classes}" failonerror="true" verbose="true">
<classpath refid="compile-test-path">
</classpath>
</javac>
</target>
<target name="coverage">
<jacoco:coverage>
<junit haltonfailure="false" fork="true" printsummary="true">
<classpath refid="run-test-path">
</classpath>
<formatter type="xml" />
<batchtest todir="${build.test.report}">
<fileset dir="${build.test.classes}" includes="**/*Test*.class">
</fileset>
</batchtest>
</junit>
</jacoco:coverage>
</target>
<target name="run-test" depends="test_compile">
<junit haltonfailure="false" fork="true" printsummary="true">
<classpath refid="run-test-path">
</classpath>
<formatter type="xml" />
<batchtest todir="${build.test.report}">
<fileset dir="${build.test.classes}" includes="**/*Test*.class">
</fileset>
</batchtest>
</junit>
</target>
<target name="test-report" depends="run-test">
<junitreport todir="${build.test.report}">
<fileset dir="${build.test.report}">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="${build.test.report}/html" />
</junitreport>
</target>
<target name="coverreport" depends="coverage">
<jacoco:report>
<executiondata>
<file file="${basedir}/jacoco.exec" />
</executiondata>
<structure name="MeltingPot unit test coverage rate report.">
<classfiles>
<fileset dir="${build.classes}" />
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${src.dir}" />
</sourcefiles>
</structure>
<html footer="Onecloud MeltingPot." destdir="${build.test.report.coverage}" />
<csv destfile="${build.test.report.coverage}/coverage-report.csv" />
</jacoco:report>
</target>
<target name="all-report" depends="coverreport,test-report">
<echo>generate unit test report and coverage rate report.</echo>
</target>
</project>
</span>

其中我的ant脚本写的还算清晰,就不多做解释了,如果大家谁对ant脚本不熟悉,可以看笔者几年以前写的一本电子书,下载地址:http://download.csdn.net/detail/wangwenjun69/3383401

3、执行测试报告:

运行命令:ant test-report

执行之后会在build/report/html下生成测试报告,其中打开index.html如下所示。

4、执行测试用例覆盖率:

执行命令:ant coverreport

执行之后会在build/report/coverage下生成覆盖报告,其中打开index.html如下所示

目标完成,顺便将demo的整个工程打包上传,如果有需要的可以直接下载。

5、总结:

dailybuild是敏捷开发思想中不可或缺的一部分,规范编码的风格和习惯,提高单元测试的覆盖率,有助于在编码阶段降一些bug揪出来,作为一个合格的软件开发人员,应该花一定的时间在单元测试和如何提高软件质量上面

相关文章

微服务测试之单元测试
一篇图文带你了解白盒测试用例设计方法
全面的质量保障体系之回归测试策略
人工智能自动化测试探索
相关文档

自动化接口测试实践之路
jenkins持续集成测试
性能测试诊断分析与优化
性能测试实例
相关课程

持续集成测试最佳实践
自动化测试体系建设与最佳实践
测试架构的构建与应用实践
DevOps时代的测试技术与最佳实践
 
分享到
 
 
     


LoadRunner性能测试基础
软件测试结果分析和质量报告
面向对象软件测试技术研究
设计测试用例的四条原则
功能测试中故障模型的建立
性能测试综述
更多...   


性能测试方法与技术
测试过程与团队管理
LoadRunner进行性能测试
WEB应用的软件测试
手机软件测试
白盒测试方法与技术


某博彩行业 数据库自动化测试
IT服务商 Web安全测试
IT服务商 自动化测试框架
海航股份 单元测试、重构
测试需求分析与测试用例分析
互联网web测试方法与实践
基于Selenium的Web自动化测试
更多...