Gradle jacoco 代码覆盖率 - 然后在 Jenkins 中发布/显示

2024-01-10

我正在尝试为 Java 应用程序项目设置代码覆盖率。

项目名称:新应用

项目结构:

  • src/java/**(源代码)
  • src/java-test(单元测试 - Junit)
  • 测试/it-测试(集成测试)
  • 测试/测试(验收测试)
  • tomcat/*(包含tomcat启动/停止脚本)
  • xx/.. 等常规应用程序所需的文件夹。

摇篮版本:1.6

环境:Linux

我有一个正在运行的 gradle 构建脚本,它从构建工件存储库(例如 artifactory/maven)获取应用程序(NewApp)依赖项(即应用程序用于构建过程的服务 jar),并构建应用程序。

现在,我想使用 JaCoCo 插件为我的 NewApp 应用程序项目获得代码覆盖率。

我遵循了 Gradle/Jacoco 的文档,但似乎没有为 jacoco 等创建任何 reports/... 文件夹,我可以在其中找到 Jacoco 覆盖率报告的内容。

我的问题: 1.为了使用单元测试(Junit)获得代码覆盖率,我假设我所要做的就是以下内容,并且不需要我在运行单元测试(测试任务,即“gradle test”)之前启动/停止tomcat来获得通过使用单元测试的代码覆盖率。请指教/纠正。我使用的代码(仅适用于 Gradle jacoco 单元测试部分)是:

apply plugin: 'jacoco'

test {
      include 'src/java-test/**'
}

jacocoTestReport {
    group = "reporting"
    description = "Generate Jacoco coverage reports after running tests."
    reports {
        xml.enabled true
        html.enabled true
        csv.enabled false
    }
    //classDirectories = fileTree(dir: 'build/classes/main', include: 'com/thc/**')
    //sourceDirectories = fileTree(dir: 'scr/java', include: 'com/thc/**')
    additionalSourceDirs = files(sourceSets.main.allJava.srcDirs)
}

对于集成测试:

task integrationTest(type: Test) {
        include 'test/java/**'
}

由于 jacocoTestReport 取决于测试任务,因此它们将首先被调用,最后 jacocoTestReport 将报告它发现的代码覆盖率。

  1. 为了获得集成测试的代码覆盖率,我假设我必须首先启动 tomcat (即在运行/调用集成测试的测试目标之前),然后调用“gradle IntegrationTest”或“gradle test”任务,然后停止 tomcat ——以获取代码覆盖报告。从其他博客文章中我还发现应该在 tomcat 启动之前设置 JAVA_OPTS 变量来分配 jacoco 代理。

例如:设置 JAVA_OPTS 变量,例如:

export JACOCO="-Xms256m -Xmx512m -XX:MaxPermSize=1024m -javaagent:/production/jenkinsAKS/jobs/NewApp/workspace/jacoco-0.6.3.201306030806/lib/jacocoagent.jar=destfile=/production/jenkinsAKS/jobs/NewApp/workspace/jacoco/jacoco.exec,append=true,includes=*"
export JAVA_OPTS="$JAVA_OPTS $JACOCO"
  1. 作为 Gradle/groovy 新手 - 我不确定应该在 build.gradle (构建脚本)中编写什么代码才能使上述集成/单元测试工作(如果涉及 tomcat 的启动/停止)。如果有人可以提供示例脚本来执行此操作,我会尝试。

  2. 当我在 Jenkins 中发布 Jacoco 代码覆盖率(使用 Jenkins 构建后操作来发布 Jacoco 报告)时,我现在没有获得任何代码覆盖率。 Jenkins 构建仪表板显示代码覆盖率为 0%(即条形图全部显示为红色,实际代码覆盖率没有绿色)。

需要您的建议来获得一些关注。


  1. 问题:我假设您的单元测试不依赖于 tomcat。在这种情况下,你是对的,你不能预先启动 tomcat。

    要创建覆盖率报告,您需要执行

    gradle jacocoTestReport
    

    without jacocoTestReportgradle 不会触发 jacoco 生成报告。

    关于您的片段的另一件事。我假设您已将默认主源集更改为source/java。在这种情况下,您不必设置additionalSourceDirs.

  2. 集成测试:是的,您需要先启动tomcat,或者至少必须确保tomcat正在运行。你应该看看 Gradle 1.7。它有一个新的任务排序规则,称为finalizedBy

    有了这个你可以做类似的事情

    task integrationtests(type: Test) {
      dependsOn startTomcat
      finalizedBy stopTomcat
    }
    

    其中 start/stopTomcat 是自定义任务。如果您必须继续使用 Gradle 1.6,则必须构建一个dependsOn chain:

    stopTomcat -dependsOn-> integrationtests -dependsOn-> startTomcat
    

    我认为博客文章是正确的,我对此没有任何经验。

  3. 启动/停止 Tomcat :你可以这样做

    task startTomcat() << {
      def tomcatStartScript = "${project.rootDir}/tomcat/startScript"
      tomcatStartScript.execute()
    }
    

    停止脚本可以用类似的方式编写。 (来自 Groovy 文档的某人:执行中 http://groovy.codehaus.org/Executing+External+Processes+From+Groovy)

  4. Jenkins & Jacoco:执行时应该修复jacocoTestReport

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gradle jacoco 代码覆盖率 - 然后在 Jenkins 中发布/显示 的相关文章

随机推荐

  • Heroku Rails 控制台不再启动

    我在 heroku cedar stack 上运行 Rails 控制台时遇到问题 以下每个命令 heroku run console heroku run Rails console heroku run bundle execrails
  • 在Java中如何将整数转换为浮点数?

    我有两个整数x and y 我需要计算x y结果我想获得浮动 例如作为以下结果3 2我想要1 5的 我认为最简单 或唯一 的方法是转换x and y转换为浮点数类型 不幸的是 我找不到一种简单的方法来做到这一点 你能帮我吗 你只需要cast
  • Windows 服务使用 Topshelf 启动然后停止

    我正在使用 Quartz net 并且试图让 Quartz 服务器在 Windows 服务中启动 我创建了一个 Windows 服务项目并包含 Quartz net 库 在我的服务类中 我有 protected override void
  • HEIC 文件签名

    我正在寻找扩展名的文件签名的完整列表 特别是 我在查找扩展名 HEIC 和 HEIF 的文件签名时遇到了一些麻烦 你知道在哪里可以得到它吗 您可以在任何操作系统中使用十六进制文件查看器 有关文件签名的完整列表 请检查https www fi
  • 从 xyz 磁力计获取磁北 (iPhone 3.0)

    我实际上是在转发 iphone 开发板的一个问题 我没有问它 但我在试图寻找它的答案时发现了它 那里还没有人回复 所以我想我应该尝试将其发布在这里 预先感谢您的任何帮助 有谁知道有关根据 CLHeading 的原始 xyz 值计算磁航向的算
  • Kubernetes 无法从 docker hub 存储库中提取镜像

    大家好希望你们一切顺利 我需要我的主机命令从机从我的 docker hub 存储库中拉取映像 我收到以下错误 它不会让从机从存储库中拉取 但是当我转到从机时 手动拉动他拉动 来自 kubernetes master 的 第一行是来自 pod
  • HTML/JS 打开一个到 C$ 驱动器的窗口

    我需要在我的应用程序中有一个链接 用于打开特定计算机的远程 C 驱动器窗口 例如 这有效 a href Connect to C a 但是 我需要用一段 JS 代码来完成它 所以我想做这样的事情 function raiseQueryDia
  • Android ImageReader 获取 NV21 格式?

    我没有成像或图形方面的背景 所以请耐心等待 我在用JavaCV https github com bytedeco javacv在我的一个项目中 在里面examples https github com bytedeco javacv bl
  • 使用未显式实例化的 VBA 用户表单

    假设我有一个名为MyUserForm我用的像 Dim form as MyUserForm Set form New MyUserForm form SomeVar Hi form Show Displays Hi somewhere on
  • gdb 漂亮打印不起作用

    我正在尝试查看 C STL 容器的内容 我读here https stackoverflow com a 10994050 2627729最新版本的 gcc 和 gdb 默认支持漂亮的打印 但是当我尝试显示地图时 我得到以下信息 然后 我尝
  • 如何调试 cordova 混合应用程序

    因此 我在远程设备上运行了 cordova 应用程序 并且我正在尝试测试扫描仪 因此必须在 Android 设备本身上进行测试 但我不知道应该如何检查它抛出的错误 因为扫描仪在我的移动设备上无法工作 任何帮助将不胜感激 Thanks 调试
  • 如何在使用 React Native 时实现 SSL 证书固定

    我需要在我的 React Native 应用程序中实现 SSL 证书固定 我对 SSL TLS 知之甚少 更不用说固定了 我也不是本地移动开发人员 尽管我了解 Java 并在这个项目上学习了 Objective C 足以应付 我开始寻找如何
  • 如何通过用户脚本抓取 HTML 表格内容?

    我正在创建一个 Greasemonkey 脚本 该脚本读取基于文本的游戏中的信息并将其存储到数据库中以供将来使用 我想要的是能够读取用户的统计信息并将这些统计信息转换为变量 以便我可以继续使信息变得有用 这是我想从中获取统计信息的表的源代码
  • Gulp 角度单元测试指令 templateUrl

    我在互联网上阅读了很多帖子 但找不到任何有效的解决方案 我正在尝试为指令编写单元测试 并希望从模板缓存提供 html 文件 我使用 Gulp 作为构建工具 测试的 gulp 任务看起来像这样 gulp task test function
  • “其中 T :某个值”是什么意思?

    什么是where T somevalue意思是 我刚刚看到一些代码说where T Attribute 我认为这与泛型有关 但我不确定这意味着什么或它在做什么 有人知道吗 It is a 对类型参数的约束 http msdn microso
  • 当我调用数组中对象的属性时出现错误

    在打字稿代码中 我有一个包含对象的数组 当我调用 getUsers users 函数时 它会根据需要返回结果 但在控制台中我收到此错误 未捕获类型错误 无法读取未定义的属性 firstName 在 getUsers index js 20
  • Java:最简单的日期减法

    我创建了一个类 其中有两个字段需要是日期 start date and date passed 我一直在研究 java 中日期的最佳方式YYYY MM DD格式允许轻松进行日期减法 并能够 组成 日期 例如将来的日期 我想要它做什么的例子
  • R 中的向量化函数

    我在 R 中有这个数据集 看起来像这样 id sample int 10000 100000 replace TRUE res c 1 0 results sample res 100000 replace TRUE date exam t
  • SQLite DB 的 MIDP Java 实现

    是否有任何 SQLite db 的 MIDP 实现可用于在 MIDlet 中使用 sqlite db 而不是使用 RMS 当然 还有Floggy http floggy sourceforge net and OpenBaseMovil h
  • Gradle jacoco 代码覆盖率 - 然后在 Jenkins 中发布/显示

    我正在尝试为 Java 应用程序项目设置代码覆盖率 项目名称 新应用 项目结构 src java 源代码 src java test 单元测试 Junit 测试 it 测试 集成测试 测试 测试 验收测试 tomcat 包含tomcat启动