写点什么

Java 代码覆盖率 super-jacoco

作者:EquatorCoco
  • 2024-12-24
    福建
  • 本文字数:1390 字

    阅读完需:约 5 分钟

项目流程



项目架构



部署步骤


注意:一定要用 Linux 服务器部署,不要用 Windows


准备 Linux 服务器环境


  1. 安装好 JDK1.8

  2. 安装好 git

  3. 安装和配置好 Maven3.6,或 3.6 以下

  4. 安装 MySQL 数据库(尽量不用 8 版本,就用 5.7、5.8 版本)


拉取 super-jacoco 开源项目


git clone https://gitee.com/didiopensource/super-jacoco.git
复制代码


初始化 MySQL


1、建立数据库:super-jacoco

2、建立数据表:执行 sql/db.sql 文件



3、修改 application.properties 文件中的数据库配置


# 以下信息需要手动配置spring.datasource.url=jdbc:mysql://IP:端口/super-jacoco?useUnicode=true&characterEncoding=utf8&verifyServerCertificate=false&useSSL=falsespring.datasource.username=super-jacoco的数据库账号spring.datasource.password=super-jacoco的数据库密码#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#git username & passwordgitlab.username=被测项目的的git账号gitlab.password=被测项目的的git密码
复制代码


编译 super-jacoco 开源项目


生成 super-jacoco.jar


mvn package -Dmaven.test.skip=true
复制代码


部署 super-jacoco


1、进入 super-jacoco 项目,把 cli.jar 复制到用户主页


cd super-jacoco/jacococp org.jacoco.cli-1.0.2-SNAPSHOT-nodeps.jar ~
复制代码




2、把 runtime.jar 传送到被测项目服务器的 jar 包位置


scp org.jacoco.agent-0.8.5-runtime.jar root@被测项目服务器IP:/root/www/xxx/back/
复制代码




3、启动 super-jacoco


nohup java -jar super-jacoco.jar &
复制代码


启动后的默认端口号为:8899


4、super-jacoco 服务器的防火墙规则自己设置


被测项目用 super-jacoco-runtime.jar 来启动


java -javaagent:/root/www/xxx/back/org.jacoco.agent-0.8.5-runtime.jar=includes=*,output=tcpserver,port=18513,address=*,append=true,destfile=/jacoco.exec -jar /root/www/xxx/back/springboot-0.0.1-SNAPSHOT.jar
复制代码


附上 jacoco 启动参数


-executioindataonly: 仅生成执行数据,不生成报告。
-agentlib: 指定JaCoCo代理库,用于Java程序。
-agentpath: 指定JaCoCo代理库,用于C / C ++程序。
=destfile: 指定覆盖已有的执行数据文件的路径。
=append: 指定追加到现有执行数据文件的路径。
=includes: 指定哪些类的方法应包含在覆盖率分析中,使用逗号分隔。
=excludes: 指定哪些类的方法应排除在覆盖率分析之外,使用逗号分隔。
=classpath: 指定JaCoCo用于查找类文件的类路径。
=classpathfile: 指定包含类路径条目的文件。
=jmxfile: 指定JMX文件的路径,用于远程应用程序。
=output: 指定报告生成的目录。
=report-aggregate: 指定聚合报告的路径。
=dump-on-exit: 在JVM退出时转储执行数据。
复制代码


使用覆盖率检测


启动覆盖率检测


  1. 准备一个不会重复的,没有使用过的 UUID

  2. 被测项目地址

  3. 被测项目上一次代码的版本 ID

  4. 被测项目目前代码的版本 ID

  5. 被测项目的地址

  6. 被测项目的 super-jacoco-runtime.jar 的端口(按照上面的启动参数就是:18513)



去被测项目进行测试,测试一段时间后,造成足够的代码覆盖


获取覆盖率收集


把启动覆盖率时的 UUID 拿来获取覆盖率


失败的场景


  1. 失败了也有日志文件

  2. 失败了的日志文件内容可能是空的,这种情况一般就是:下载项目代码后,编译失败了



成功的场景



查看覆盖率报告


整个 Java 项目



Java 实现类列表



Java 实现类




覆盖分类



文章转载自:mua~mua~

原文链接:https://www.cnblogs.com/mua9102/p/18625047

体验地址:http://www.jnpfsoft.com/?from=infoq

用户头像

EquatorCoco

关注

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
Java代码覆盖率super-jacoco_Java_EquatorCoco_InfoQ写作社区