/catalog/5b44b7aebbe041098fbfd868e044f805//Document/267328648106053.html/Document/267018778099781.html/Document/266676511322181.html/Document/265619597201477.html/Document/235862026059845.html/Document/235543126302789.html/Document/235180874285125.html/Document/234831289405509.html/Document/234475373678661.html/Document/233059773943877.html/Document/232687006150725.html/Document/232354139811909.html/Document/230936619933765.html/Document/230597170643013.html/Document/230237883404357.html/Document/229522033393733.html/Document/228458058801221.html/Document/227760545189957.html/Document/227398664417349.html/Document/227055527931973.html

Java代码覆盖率工具Jacoco介绍

Jacoco是一个开源的覆盖率工具。Jacoco可以嵌入到Ant 、Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序。很多第三方的工具提供了对Jacoco的集成,如Jenkins。


对于Java来说,我们常用的代码覆盖率工具就是Jacoco,Java code coverage 各取了两个字母,所以叫Jacoco。我几乎对所有平台的代码覆盖率都有涉及,比如java的、python的、go的、php的、c++、.net...基本上全都做过,一般的测试覆盖率的工具我都用过,也都大致的看过一些他们的源码和改造,但是没有任何一款代码覆盖率统计工具会比java里的Jacoco更加强大,它几乎是最好用的。


它来源于很老的一个EclEmma,有老的技术人员可能知道这个工具。最早的是Eclipse的一个插件,专门来统计代码覆盖率的,后来在EclEmma的技术之上重新二次开发和封装了Jacoco这个工具。它的官网也是和EclEmma在一起的。


他可以通过多种工具去进行集成和驱动。java作为我们第一门语言的朋友都知道,java中几个重要的构建工具中,其中两种最重要的、最常用的就是Ant 和Maven。虽然现在有的朋友可能Ant用的比较少,但是它依然是一个经典的存在。


我们在这里给不熟悉的同学简单介绍一下,用简单的一句话解释:Ant 和Maven就是把你的java代码打成可执行包的工具,我们也叫做build工具,当然还有一些辅助的功能。也就是在说在我们打包的工具里面是可以嵌入Jacoco这个工具的。

Jacoco的原理


对 Java 字节码进行插桩,On-The-Fly 和 Offine 两种方式。执行测试用例,收集程序执行轨迹信息,将其 dump 到内存。数据处理器结合程序执行轨迹信息和代码结构信息分析生成代码覆盖率报告。将代码覆盖率报告图形化展示出来,如 html、xml 等文件格式。
接下来我们了解一下Jacoco的基本原理,它的使用是一种动态插桩和静态插桩混用的一种原理。所谓插桩就是在你编译的文件里面去插入Jacoco的探针。在代码里面插入一些探针,一些监控,不管你是以单元测试还是以什么测试的身份去跑这个代码。
这行代码跑完之后,就会被我的探针记录下来,最终就会被收集展示出来,我的代码覆盖情况基本就被展示出来了。这就是它基本的一个原理。


它的第一个步骤是在你的代码里进行插桩,不管是On-The-Fly模式还是Offine 模式,插桩之后,它会监控代码的使用情况。当你的代码执行完毕之后,测试运行完毕之后它会把这些信息收集在内存里面,我们管它叫 dump 。


这个词很多朋友应该对它有了解,因为只要是测性能,都会遇到这个词。保存到 dump内存中去之后,我们把它下载下来,就有了插桩原始的统计数据,然后我们再用这些数据去生成你想要的html或xml的报告。

代码测试工具

作为测试人员我们不必去了解它太深层的原理,但是这个流程我们要记住,因为我们后面会用到。

 

接下来的文章中,我们将带大家一起通过一个实操案例了解了解一下Jacoco的具体使用方法和使用流程。