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

软件安装
Ant
Jacoco

Tomcat配置
1、进入你需要统计代码覆盖率的tomcat  
cd /data/tomcat-gateway/bin
2、先关闭这个tomcat的服务
正常情况下可以直接执行  ./shutdown.sh
执行结束后 ps -ef|grep tomcat名 查看是否已经正常关闭,如果还没有关闭 kill -9 pid(来源于ps的结果)
3、修改 catalina.sh  的JAVA_OPTS/CATALINA_OPTS配置
output=file时,需要shudown服务才能dump出jacoco.exec文件
declare -x CATALINA_OPTS="-javaagent:/data/jacoco/lib/jacocoagent.jar=includes=*,output=file,destfile=/data/jacocoExec/jacoco_gateway.exec"
output=tcpserver时,可以利用ant执行dump操作,无需shutdown服务;
address可以填写hostname或ip,填ip时需要注意,查看/etc/hosts的hostname映射的ip是什么
declare -x CATALINA_OPTS="-javaagent:/data/jacoco/lib/jacocoagent.jar=includes=*,output=tcpserver,port=8457,address=172.16.1.31"
具体参数的意思请查看官方文档
4、启动服务 ./startup.sh
5、查看一下JAVA_OPTS是否有修改正确,在这有个坑,有一种情况是你把JAVA_OPTS写在前面,在后面被别人的覆盖了
ps -ef|grep tomcat名 看出来的结果有没有刚才你修改的值

6、output=tcpserver时,查看tcpserver有没有启来

netstat -tunlp|grep 8457

Spring Boot服务
启动命令如下:
java -javaagent:/data/jacoco/lib/jacocoagent.jar=includes=*,output=tcpserver,port=8457,address=172.16.1.31 -jar springboot-xxx.jar

ant任务配置
配置jacocoAnt.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project name="JaCoCo" default="run" xmlns:jacoco="antlib:org.jacoco.ant">
  3. <!--Jacoco的安装路径-->
  4. <property name="jacocoAntPath" value="/opt/jacoco/lib/jacocoant.jar"/>
  5. <!--最终生成.exec文件的路径,Jacoco就是根据这个文件生成最终的报告的-->
  6. <property name="jacocoExecPath" value="/data/jacocoExec"/>
  7. <!--生成覆盖率报告的路径-->
  8. <property name="jacocoReportPath" value="/data/jacocoReport"/>
  9. <!--远程tomcat服务的ip地址 xxx.xx.xxx.163(172.16.1.31)-->
  10. <property name="server_ip_test163" value="172.16.1.31"/>
  11. <!--前面配置的远程tomcat服务打开的端口,要跟上面配置的一样-->
  12. <property name="server_port_cybs" value="8456"/>
  13. <property name="server_port_gateway" value="8457"/>
  14.  
  15. <!--源代码路径-->
  16. <property name="gatewaySrcPath" value="/data/jacocoSrc/Gateway/GATEWAY/fi-website/src/main/java"/>
  17.  
  18. <property name="cybsSrcPath" value="/data/jacocoSrc/cybs/src/main/java"/>
  19.  
  20. <!--.class文件路径-->
  21. <property name="gatewayClassesPath" value="/data/jacocoClasses/gateway/WEB-INF/classes"/>
  22. <property name="cybsClassesPath" value="/data/jacocoClasses/cybs/WEB-INF/classes"/>
  23.  
  24. <!--让ant知道去哪儿找Jacoco-->
  25. <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
  26. <classpath path="${jacocoAntPath}"/>
  27. </taskdef>
  28.  
  29. <target name="run">
  30. <echo message="start..."/>
  31. <echo message="dump..."/>
  32. <antcall target="dump"/>
  33. <echo message="merge..."/>
  34. <antcall target="merge"/>
  35. <echo message="report..."/>
  36. <antcall target="report"/>
  37. <echo message="end..."/>
  38. </target>
  39.  
  40. <!--dump任务:
  41. 根据前面配置的ip地址,和端口号,访问目标tomcat服务,并生成.exec文件。-->
  42. <target name="dump">
  43. <jacoco:dump address="${server_ip_test163}" reset="true" destfile="${jacocoExecPath}/jacoco_gateway.exec" port="${server_port_gateway}" append="false"/>
  44. <jacoco:dump address="${server_ip_test163}" reset="true" destfile="${jacocoExecPath}/jacoco_cybs.exec" port="${server_port_cybs}" append="false"/>
  45. </target>
  46.  
  47. <target name="merge">
  48. <jacoco:merge destfile="${jacocoExecPath}/merged.exec">
  49. <fileset dir="${jacocoExecPath}" includes="*.exec"/>
  50. </jacoco:merge>
  51. </target>
  52.  
  53. <!--jacoco任务:
  54. 根据前面配置的源代码路径和.class文件路径,
  55. 根据dump后,生成的.exec文件,生成最终的html覆盖率报告。-->
  56. <target name="report">
  57. <jacoco:report>
  58. <executiondata>
  59. <file file="${jacocoExecPath}/merged.exec"/>
  60. </executiondata>
  61.  
  62. <structure name="JaCoCo Report">
  63. <group name="gateway coverage">
  64. <sourcefiles encoding="UTF-8">
  65. <fileset dir="${gatewaySrcPath}"/>
  66. </sourcefiles>
  67. <classfiles>
  68. <fileset dir="${gatewayClassesPath}"/>
  69. </classfiles>
  70. </group>
  71.  
  72. <group name="cybs coverage">
  73. <sourcefiles encoding="UTF-8">
  74. <fileset dir="${cybsSrcPath}"/>
  75. </sourcefiles>
  76. <classfiles>
  77. <fileset dir="${cybsClassesPath}"/>
  78. </classfiles>
  79. </group>
  80.  
  81. </structure>
  82.  
  83. <html destdir="${jacocoReportPath}" encoding="utf-8"/>
  84. <csv destfile="${jacocoReportPath}/report.csv"/>
  85. <xml destfile="${jacocoReportPath}/report.xml"/>
  86. </jacoco:report>
  87. </target>
  88. </project>

执行ant任务
ant -f jacocoAnt.xml

<jacoco:dump address="${server_ip_test163}" reset="true" destfile="${jacocoExecPath}/jacoco_gateway.exec" port="${server_port_gateway}" append="false"/>

reset=true时,会在dump出exec文件后,清空覆盖率数据;
append=false时,dump出的exec文件会覆盖原有的exec文件;append=true时,dump出的exec文件追加至原有的exec文件;

结果展示:

  1. + cd /data/jacocoAntXml
  2. + ant -f jacocoAnt.xml
  3. Buildfile: /data/jacocoAntXml/jacocoAnt.xml
  4.  
  5. run:
  6. [echo] start...
  7. [echo] dump...
  8.  
  9. dump:
  10. [jacoco:dump] Connecting to /172.16.1.15:8457
  11. [jacoco:dump] Dumping execution data to /data/jacocoExec/jacoco_gateway.exec
  12. [jacoco:dump] Connecting to /172.16.1.15:8456
  13. [jacoco:dump] Dumping execution data to /data/jacocoExec/jacoco_cybs.exec
  14. [jacoco:dump] Connecting to /172.16.1.15:8470
  15. [jacoco:dump] Dumping execution data to /data/jacocoExec/jacoco_creditCardBank.exec
  16. [jacoco:dump] Connecting to /172.16.1.15:8459
  17. [jacoco:dump] Dumping execution data to /data/jacocoExec/jacoco_mps.exec
  18. [jacoco:dump] Connecting to /172.16.1.15:8451
  19. [jacoco:dump] Dumping execution data to /data/jacocoExec/jacoco_accounting.exec
  20. [jacoco:dump] Connecting to /172.16.1.15:8458
  21. [jacoco:dump] Dumping execution data to /data/jacocoExec/jacoco_ordercenter.exec
  22. [jacoco:dump] Connecting to /172.16.1.15:8453
  23. [jacoco:dump] Dumping execution data to /data/jacocoExec/jacoco_notification.exec
  24. [jacoco:dump] Connecting to /172.16.1.15:8454
  25. [jacoco:dump] Dumping execution data to /data/jacocoExec/jacoco_poss.exec
  26. [echo] merge...
  27.  
  28. merge:
  29. [jacoco:merge] Loading execution data file /data/jacocoExec/jacoco_accounting.exec
  30. [jacoco:merge] Loading execution data file /data/jacocoExec/jacoco_creditCardBank.exec
  31. [jacoco:merge] Loading execution data file /data/jacocoExec/jacoco_cybs.exec
  32. [jacoco:merge] Loading execution data file /data/jacocoExec/jacoco_gateway.exec
  33. [jacoco:merge] Loading execution data file /data/jacocoExec/jacoco_mps.exec
  34. [jacoco:merge] Loading execution data file /data/jacocoExec/jacoco_notification.exec
  35. [jacoco:merge] Loading execution data file /data/jacocoExec/jacoco_ordercenter.exec
  36. [jacoco:merge] Loading execution data file /data/jacocoExec/jacoco_poss.exec
  37. [jacoco:merge] Loading execution data file /data/jacocoExec/merged.exec
  38. [jacoco:merge] Writing merged execution data to /data/jacocoExec/merged.exec
  39. [echo] report...
  40.  
  41. report:
  42. [jacoco:report] Loading execution data file /data/jacocoExec/merged.exec
  43. [jacoco:report] Writing bundle 'webgate coverage' with 701 classes
  44. [jacoco:report] Writing bundle 'gateway coverage' with 198 classes
  45.  
  46. [echo] end...
  1. BUILD SUCCESSFUL

jacoco + ant远程统计(tomcat/spring boot)服务的代码覆盖率的更多相关文章

  1. Jacoco远程统计tomcat服务(Windows系统)的代码覆盖率

    Jacoco远程统计tomcat服务(Windows系统)的代码覆盖率 2017-09-21 目录 1 Jacoco的安装和设置  1.1 什么是Jacoco?  1.2 Jacoco安装  1.3 ...

  2. .net core + eureka + spring boot 服务注册与调用

    .net core + eureka + spring boot 服务注册与简单的调用 假期小长假遇上疫情只能去家里蹲了,刚好有时间总结一下. 概述 微服务架构是当前比较火的分布式架构,本篇基于.ne ...

  3. Https系列之二:https的SSL证书在服务器端的部署,基于tomcat,spring boot

    Https系列会在下面几篇文章中分别作介绍: 一:https的简单介绍及SSL证书的生成二:https的SSL证书在服务器端的部署,基于tomcat,spring boot三:让服务器同时支持http ...

  4. windows环境下,spring boot服务使用docker打包成镜像并推送到云服务器私有仓库

    最近在淘宝上学习springcloud教程,其中有几节课是讲解讲本地springboot服务打包成镜像并推送到云服务器私有仓库,但是教程里面用的事Mac环境,我的是Windows环境,而且课程里面没有 ...

  5. 【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志

    如题: docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志 场景再现: docker部署并启动 ...

  6. 【docker】centOS7上部署的mysql和spring boot服务,要求,mysql的时间、java程序服务的时间和宿主机的时间完全保持一致【修改mysql时区,临时和永久】【修改spring boot配置文件时区】【修改docker启动spring boot实例程序时区】

    要求:centOS7上部署的mysql和spring boot服务,要求,mysql的时间.java程序服务的时间和宿主机的时间完全保持一致: ============================ ...

  7. 启动/关闭Spring boot服务脚本

    启动Spring boot服务脚本 #!/bin/bash cd /test java -jar test.jar &> ./test.log & echo "成功&q ...

  8. Java框架Spring Boot & 服务治理框架Dubbo & 应用容器引擎Docker 实现微服务发布

    微服务系统架构实践 开发语言Java 8 框架使用Spring boot 服务治理框架Dubbo 容器部署Docker 持续集成Gitlab CI 持续部署Piplin 注册中心Zookeeper 服 ...

  9. 【转载收藏】使用Jacoco远程统计tomcat服务的代码覆盖率

    在做软件开发的时候经常会遇到做各种测试,这里介绍一种本人遇到的:代码覆盖率测试, 这个测试非常实用,能发现许多无效的模块和代码.强烈推荐!!!!! 网上好多资料都不全,而且没有详细的配置流程 本文将简 ...

随机推荐

  1. maximize_window()最大化浏览器和刷新当前页面refresh()

    from selenium import webdriverdriver = webdriver.Firefox()driver.get("https://www.baidu.com&quo ...

  2. pandas 入门(3)

    from pandas import Series, DataFrame, Index import numpy as np # 层次化索引 对数据重塑和分组操作很有用 data = Series(n ...

  3. sql select as

    as 可理解为:用作.当成,作为:一般式重命名列名或者表名.例如有表table, 列 column_1,column_2 你可以写成 select column_1 as 列1,column_2 as ...

  4. Maven 标准项目结构

    项目结构 src main java         源文件 resources    资源文件 filters   资源过滤文件 config   配置文件 scripts   脚本文件 webap ...

  5. SA & SAM

    后缀数组SA \(sa[i]\)与\(rk[i]\) \(sa[i]\) 表示排名为 \(i\) 的后缀是哪一个(在原串中开头位置). \(rk[i]\)(或\(rank[i]\))表示开头位置是 \ ...

  6. JavaScript异步的底层原理

    JavaScript引擎属于单线程作业,意味着:在同一时间只能执行一个代码块,这些代码块的执行就阻塞了异步事件的处理. 因此,出现了"任务队列"(task queue),我们可以将 ...

  7. hash和history

    location.hash="aaa" history.pushState({},'', "home") history.replaceState() hist ...

  8. 调用SM30数据表维护的函数

    相关文章:http://www.cnblogs.com/caizjian/p/3248499.html 1.se11进去新建一个数据表 2.se55进去生产表维护 3.sm30进去维护数据表 4.se ...

  9. OCTAVE-CONFIG

    SYNOPSIS 总览 octave-config [--m-site-dir] [--oct-site-dir] [-v|--version] [-h|-?|--help] DESCRIPTION ...

  10. OGG-01169

    OGG-01169  Oracle GoldenGate Delivery for Oracle, dwarer.prm:  Encountered an update where all key c ...