在docker中使用jacoco

jacoco一款主流的统计代码测试覆盖率的工具,最近研究了下在docker下的用法。

jacoco官网(https://www.jacoco.org),建议大家先看一下官网说明,看完基本就明白怎么用了。我是基于docker和jacoco的0.8.6版本进行搭建的。不基于docker的场景,使用更简单,不单独说明了。

1. 把文件打进docker镜像

既然用docker,就要把jacocoagent.jar打进镜像,比如我的jacocoagent.jar文件在镜像的/app/jacoco/jacocoagent.jar目录下

2. 增加JVM启动参数

从jacoco官网(https://www.jacoco.org/jacoco/trunk/doc/agent.html)上,可以看到获取测试覆盖率文件分为三种方式,分别是:

. 输出文件,只有当JVM结束时才能生成本地文件

. TCP Socket Server 模式, 通过socket端口连接获取到测试覆盖率数据

. TCP Socket Client模式,Jacoco agent会连接到指定的TCP端,请求时执行数据写到socket

我采用的 TCP Socket Server模式。需要在JVM启动时,增加参数:

-javaagent:/app/jacoco/jacocoagent.jar=output=tcpserver,address=0.0.0.0,port=7500

注意:因为是基于docker,所以address需要写0.0.0.0。  port随意。

注意在镜像发布后,找到该应用的虚拟地址(不是node机器地址),比如我的发布后是10.2.8.161

3. ANT

在客户端机器上,安装ant,配置build.xml。示例如下,注意替换你的ant安装地址,并把jacocoant.jar复制到对应目录下:

<?xml version="1.0" encoding="UTF-8"?>

<project name="Jacoco" xmlns:jacoco="antlib:org.jacoco.ant" default="jacoco"> 

    <property name="jacocoantPath" value="/usr/local/ant/jacocoant.jar"/>

    <property name="integrationJacocoexecPath" value="./jacoco.exec"/>

    <property name="ip" value=""/>

    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">

      <classpath path="${jacocoantPath}" />

    </taskdef>


    <target name="dump">

        <jacoco:dump address="${ip}" port="7500" reset="false" destfile="${integrationJacocoexecPath}" append="true"/>

    </target>

</project>

执行命令:ant dump -Dip=10.2.8.161

即可把测试覆盖率文件jacoco.exec下载下来。

4. 生成HTML

在应用的POM里面增加:

<plugin>

                <groupId>org.jacoco</groupId>

                <artifactId>jacoco-maven-plugin</artifactId>

                <version>0.8.6</version>

                <configuration>                   

                    <destFile>jacoco.exec</destFile>                   

                    <dataFile>jacoco.exec</dataFile>

                </configuration>

                <executions>

                    <execution>

                        <id>jacoco-initialize</id>

                        <goals>

                            <goal>prepare-agent</goal>

                        </goals>

                    </execution>

                    <execution>

                        <id>jacoco-site</id>

                        <phase>test</phase>

                        <goals>

                            <goal>report</goal>

                        </goals>

                    </execution>

                </executions>

            </plugin>

把下载的jacoco.exec放到pom平级目录下。

执行report命令


然后在target目录下会有sit子目录,即为生成的HTML文件,用浏览器打开即可。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容