美文网首页
利用jacoco,如何在runtime期间获取项目代码覆盖率?

利用jacoco,如何在runtime期间获取项目代码覆盖率?

作者: 小明今晚加班 | 来源:发表于2019-09-26 09:16 被阅读0次

    无论你使用哪个服务器,tomcat也好,web-sephery liberty也罢,如何把jacoco这个agent打到我们的image中?如何进行jacoco的配置,以及报告解析成为解决上述问题的关键!
    我这里利用liberty为基础镜像,把jacocoagent构建到image中,经过实践采坑,记录一下历程:

    1. 我的自定义Dockerfile文件:
    **********************START:DOCKERFILE**********************
    FROM websphere-liberty:kernel
    
    COPY sonarTest.war /config/dropins/
    COPY jacocoagent.jar /home/
    
    ENV JAVA_TOOL_OPTIONS -javaagent:/home/jacocoagent.jar=output=tcpserver,port=6300,address=*
    
    EXPOSE 9080 9443 6300
    **********************END:DOCKERFILE**********************
    
    1. 构建image:
    docker build -t jacoco:v0 . 
    
    1. 启动image:(这里注意,一定要把6300端口暴露出去,否则影响下一步的获取exec文件)
    docker run -d -p 6300:6300
    
    1. 容器启动之后,就可以通过CLI去获取项目代码覆盖率;
      生成二进制文件:
    java -jar jacococli.jar dump --destfile ./jacoco.exec 
    
    1. 解析二进制文件:(生成report文件夹,在其下有html文件信息;并生成report.xml文件)
    java -jar jacococli.jar report ./jacoco.exec --classfiles /Users/zhaochengcai/eclipse-workspace/sonarTest/build/classes/java --sourcefiles /Users/zhaochengcai/eclipse-workspace/sonarTest/src/main/java --html report --xml report.xml
    

    Tips:其中 --classfiles是必须的,也就是项目build之后生成的class文件.

    至此,jacocoagent已成功打进我们的image中,并获取了测试覆盖率的文件。


    在上述经历中遇到的问题:

    1. 启动image的时候 没有把port 6300给暴露出来,导致第4步生成exec二进制文件的时候出现Connection reset. 这里必须要承认自己在docker方面的基础知识不够扎实!!!
    2. 在构建Dockerfile的时候,address=* 这个参数有点意思,之前我写的是address=localhost,也尝试了address=127.0.0.1,但是在第4步获取exec二进制文件的时候得到的错误都是如下所示:


      Connection reset

      这里要借助jacoco官方文档的一句话:

    IP address or hostname to bind to when the output method is tcpserver or connect to when the output method is tcpclient. 
    In tcpserver mode the value "*" causes the agent to accept connections on any local address.
    

    也就是说如果用address=* 的话,jacoco agent可以接收本地的任何连接.所以,这里使用 * 通配符为妙.

    image.png

    相关文章

      网友评论

          本文标题:利用jacoco,如何在runtime期间获取项目代码覆盖率?

          本文链接:https://www.haomeiwen.com/subject/ujrfuctx.html