SonarQube -integrationTest.exec -sonar Runner (Gradle) 或“sonar-runner”命令 - 显示 0.0% 覆盖率

2023-11-25

运行基于 Gradle 的构建和集成测试后,我在“build/jacoco”文件夹中成功生成了 Jacoco 的 2 个 .exec 文件。

梯度命令: “gradle clean 构建集成测试”

完成后,它会在 build/jacoco 文件夹下生成以下 .exec 文件。

  1. 测试执行程序
  2. 集成测试.exec

以下是我的 sonar-project.properties 文件。当我从 Linux 提示运行“sonar-runner”时,它完成了,但在该项目的 SonarQube 仪表板上,我看到单元测试显示大约 34.5%,但集成测试显示 0.0%。两个 .exec 文件都有有效的大小。我还在 .exec 文件上执行了“cat”操作,并将输出通过管道传输到 Linux 中的“strings”命令,并看到integrationTest.exec 确实命中了测试函数 - 我只有 1 个 .java 文件。

当我运行“gradle clean build IntegrationTest sonarRunner -Dxxx.xxx=yyy -Dyyy.xx=zzz”时,即通过使用 -D 选项传递 sonar-project.properties 文件中提到的所有声纳变量,它可以工作,但结果相同SonarQube 项目的仪表板。项目的声纳仪表板有两个为单元/集成测试配置的小部件,我包括用于显示总体覆盖范围的 IT 测试。总体覆盖率显示为 34.5%(这是单元测试%值)。在此操作期间,Sonar 确实看到了 test.exec、integrationTest.exec,并且还自动生成了overall-xxx.exec 文件。

NOTE:我不知道在单独的 putty/linux 控制台上启动 tomcat 时,或者在 Gradle 构建脚本中,为 Jacoco 提供任何值或设置 JAVA 代理。我已经获得了integrationTest.exec 文件和test.exec 文件,因此不确定IT 测试完成运行后是否需要停止JVM。我认为我不需要这些,因为我有 .exec 文件的有效文件大小。

My ?:- 为什么即使我正确设置/传递以下变量,声纳也没有在仪表板上获得 IT 覆盖:

sonar.jacoco.itReportPath=build/jacoco/integrationTest.exec

-bash-3.2$猫声纳项目.properties

# Root project information
sonar.projectKey=com:company:product:ProjectA
sonar.projectName=ProjectA
sonar.projectVersion=1.0
# optional description
sonar.projectDescription=ProjectA Service

#Tells SonarQube that the code coverage tool by unit tests is JaCoCo
sonar.java.coveragePlugin=jacoco

#Tells SonarQube to reuse existing reports for unit tests execution and coverage reports
sonar.dynamicAnalysis=reuseReports

# Some properties that will be inherited by the modules
sonar.sources=src/java,test/java,src/java-test

# Sonar Unit Test Report path
sonar.jacoco.reportPath=build/jacoco/test.exec

# Sonar Integration Test Report Path
sonar.jacoco.itReportPath=build/jacoco/integrationTest.exec

sonar.junit.reportsPath=build/UT/results

# Sonar Binaries
sonar.binaries=build/classes/main

缩小原因:我认为这是由于集成测试的 .exec 文件造成的。为了证明这一点:我将 UT exex 文件传递​​给 Sonar 变量中的两个 reportsPaths,即以下内容,SonarQube 选择了 UT/IT 测试覆盖范围。这证明,如果用于 IT 测试的 .exec 文件很好(我认为是但我需要仔细检查),那么 Sonar 将选择 .exec 文件并显示有效的覆盖率 % 而不是 0.0%。注意:以下只是为了证明 Sonar 是否正在选取值。 itReportPath 变量应使用 Jacoco 集成测试生成的 .exe 文件。

sonar.jacoco.reportPath=build/jacoco/test.exec

# Sonar Integration Test Report Path
#sonar.jacoco.itReportPath=build/jacoco/testintegrationTest.exec
sonar.jacoco.itReportPath=build/jacoco/test.exec

好的,找到问题了。我正在 Gradle 中运行 IntegrationTest 任务,并且没有将 jacocoagent.jar (根据 Jacoco 文档)附加到目标 JVM (Tomcat 的实例)范围。完成此操作后,我从 Gradle 中的 IntegrationTest 任务中删除了 jacoco { ... } 部分(build.gradle 或 GRADLE_HOME/init.d/some.common.gradle 文件,因为这会将 jacoco 代理附加到运行 Gradle 的 Java JVM )。现在,一旦 jacocoagent.jar 附加到 Tomcat 的 JVM(按照下面的行,我在 Tomcat 的startup.sh 脚本中添加并将变量添加到启动 Tomcat 的命令中),然后我运行 Gradle (integrationTest) 任务来运行 IT 测试。

PROJ_EXTRA_JVM_OPTS=-javaagent:tomcat/jacocoagent.jar=destfile=build/jacoco/IT/jacocoIT.exec,append=false

然后,当 Gradle 正在进行时,测试运行,我得到了一个具有一定文件大小的文件(给定位置的 jacocoIT.exec),但这还不是最终的文件。我必须通过运行 Tomcat 的 stop.sh 脚本来停止 Tomcat 会话/JVM 实例。 Tomcat 停止后,我看到 jacocoIT.exec 文件大小显着增加,这是有效的最终 jacocoIT.exec 文件(我需要 sonarRunner Gradle 任务或 sonar-runner 可执行文件来选择并成功将 IT 代码覆盖率数据推送到项目的声纳仪表板)。完成后,我获得了 UT + IT 及其组合代码覆盖率。

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

SonarQube -integrationTest.exec -sonar Runner (Gradle) 或“sonar-runner”命令 - 显示 0.0% 覆盖率 的相关文章

  • Android 工具测试库模块覆盖率

    我继承了一个android项目来设置代码覆盖率 由于我对 android 没有做过太多的工作 在 gradle 中也几乎没有做过多少工作 所以我开始寻找有用的教程 令人惊讶的是 前几个教程非常有帮助 我能够包含 jacoco gradle
  • 如何定义一个 pytest 夹具供给定测试子目录中的所有测试使用?

    给定一个目录tests有几个子目录 每个子目录都包含测试模块 如何创建一个pytest仅在特定子目录中找到的每个测试之前运行的固定装置 tests init py subdirXX test module1 py test module2
  • 如何从 Visual Studio 以调试模式运行 NUnit?

    我最近正在为我一直在研究的一些 C 构建一个测试框架 我在工作区中设置了 NUnit 和一个新项目来测试该组件 如果我从 Nunit v2 4 加载单元测试 一切都会很好 但我已经到了在调试模式下运行并设置一些断点非常有用的地步 我已经尝试
  • Guice 字段注入不起作用(返回 null)

    我在使用 Guice 时遇到空值问题 接下来我将向您展示一个类似场景的示例 我知道字段注入是一种不好的做法 但我希望它在演示中像这样工作 我有一个名为B 这是我要注入的 class B Inject public B public void
  • Espresso - 检查使用按钮按下意图打开哪个活动?

    是否可以跟踪按下某个按钮后打开了哪个 Activity 我有一个测试 其中当单击 按下按钮时 it 向服务器发送请求 直到发送请求时 它打开一个活动 验证是否执行成功在测试中 我需要检查打开的 Activity 是什么 我的测试示例 检查
  • 开玩笑 setTimeout 不暂停测试

    it has working hooks async gt setTimeout gt console log Why don t I run expect true toBe true 15000 我已经查看了这个答案 Jest 文档和几
  • OutputCapture 进行多次测试

    我正在使用 org springframework boot test OutputCapture 来测试记录某些内容的注释 它对于单个测试非常有效 当单独运行测试时 如果源文件中存在使用输出捕获的多个测试 但是当多个测试一起运行时 只有第
  • 如何在 OS X 上的旧版 Safari 中测试我的网站?

    苹果似乎不提供旧版本 Safari 的下载 我什至不确定它们是否会安装在 Mac OS X 上 因为 Safari 似乎是操作系统的一部分 就像 Windows 上的 Internet Explorer 一样 有什么方法可以在旧版本的 Sa
  • 如何使用 Magento 测试 cron?

    首先我需要了解 Magento cron 是如何工作的 我知道 cron 在 Linux 上如何工作 使用crontab e 我知道我需要设置 Magento 的 cron php 定期运行 但是当我在 magento 配置文件中定义 cr
  • 运行连接到 Django 测试数据库的 Celery Worker

    背景 我正在开发一个项目 该项目使用 Celery 来安排将在未来某个时间运行的任务 这些任务推动最终状态机的状态向前发展 这是一个例子 未来的提醒计划在 2 天内发送给用户 当该计划任务运行时 会发送一封电子邮件 并且 FSM 会前进到下
  • 跳过测试文件 Jest 中的一项测试

    我正在使用 Jest 框架并有一个测试套件 我想关闭 跳过其中一项测试 谷歌搜索文档没有给我答案 您知道答案或需要检查的信息来源吗 我在这里找到了答案 https devhints io jest https devhints io jes
  • 如何解决声纳中的 dodgy:unchecked/unconfirmedcast 问题?

    我在下面的代码中通过声纳获得异常 我该如何解决这个问题 建议我 Override public boolean validate BaseInfo infoObject boolean isValid true AckTransferPay
  • Mockito、argThat 和 hasEntry

    tl dr 这些测试无法编译 因为类型参数不匹配 我应该做哪些更改才能使它们编译并运行 正确吗 https github com wesleym matchertest https github com wesleym matchertes
  • 使用 Protractor 检查浏览器控制台中没有错误

    我正在使用 Protractor 来测试 AngularJS 我想检查在测试结束时是否没有发生未捕获的异常并打印到浏览器控制台 有没有一种简单的方法可以做到这一点 如果您将 Protractor 与 Jasmine 一起使用 请使用以下代码
  • 将 gcov 与 CMake/CDash 结合使用的详细指南?

    我在我的项目中使用 CMake 并设置了 cdash 服务器以进行连续 夜间构建 一切运行良好 通过设置 crontab 我们可以将每小时 每晚的构建 测试结果自动上传到我们的 cdash 服务器 我的下一步是将测试覆盖率报告添加到构建中
  • 在 Cypress 中递增和递减 的值

    我想测试 HTML 输入字段的值的递增和递减 type number 在赛普拉斯 更准确地说 我更喜欢使用箭头键来增加和减少值 但我似乎无法使用最明显的方法来实现这一点 作为一个最小的工作示例 我设置了一个 React 组件 其渲染方法如下
  • jquery(或纯js)模拟按下回车键进行测试

    模拟用户按 enter 键的最佳方法是什么 element keypress 似乎不允许我传递按下的实际键 这是用于单元测试的 演示在这里 http jsfiddle net 3xTM2 var e jQuery Event keypres
  • 毒性测试,使用 setup.py extra_require 作为毒性 deps 源

    我想使用 setup py 作为安装测试包的权限 通过 extra requires 完成 如下所示 setup extras require test pytest Tox 似乎只能从requirements txt安装 https to
  • Perl 构建、单元测试、代码覆盖率:一个完整​​的工作示例

    我找到的关于 Perl 构建过程 单元测试和代码覆盖率的大多数 Stackoverflow 答案都只是将我指向 CPAN 那里的文档 指向 CPAN 模块绝对没有任何问题 因为完整的文档应该位于此处 不过 在很多情况下 我很难找到完整的工作
  • 测试框架允许测试依赖于其他测试

    我想知道是否有一个测试框架允许将测试声明为依赖于其他测试 这意味着如果它们所依赖的测试未通过 则不应运行它们 或者不应突出显示它们的结果 这种设置的目的是在存在许多测试失败的情况下更容易确定根本原因 作为奖励 如果有某种方法可以使用一个测试

随机推荐

  • Python argparse --toggle --no-toggle 标志

    有没有简单直接的使用方法 toggle and no togglePython 的 argparse 的标志 现在我正在使用类似于以下内容的东西 import argparse parser argparse ArgumentParser
  • for循环条件下方法调用的效率

    我正在编写一个游戏引擎 其中一组对象保存在一个ArrayList使用 for 循环进行迭代 显然 效率相当重要 所以我想知道循环的效率 for String extension assetLoader getSupportedExtensi
  • React 高阶组件强制重新渲染包装组件

    我正在努力了解如何在高阶组件中正确实现此验证行为 编辑 TLDR 感谢用户 noa dev 的出色建议 我在这里创建了一个 React Fiddle https jsfiddle net 8nLumb74 1 来展示问题 简而言之 为什么我
  • 使用 Google Directions API 问题绘制具有超过 8 个航点的路线图

    我正在尝试绘制具有多个航点的路线图 根据谷歌API 您只能使用8个航点 对于业务开发 您只能使用23个航点 但这不足以绘制准确的旅行地图 我得到了一个值得注意的解决方案链接在这里但没有正常工作 该解决方案在某种程度上存在一个问题 它无法绘制
  • 如何获取eclipse的JDT源码?

    我正在尝试编写一个Eclipse插件 但我发现默认情况下没有源 我在 www eclipse org 上搜索 但没有找到任何东西 我的日食是3 6 2 哪里可以得到JDT的源码 似乎在最新版本的 Eclipse 至少是 Juno 和 Kep
  • Solr - 不区分大小写的搜索不起作用

    我想对字段应用不区分大小写的搜索myfield在 solr 中 我用谷歌搜索了一下 我发现我需要申请LowerCaseFilterFactory字段类型和字段应该是solr TextFeild 我将其应用到我的schema xml并重新索引
  • 在 matlab exe 中使用标准 io 流:stdin 和 stdout

    Question 我希望它能够 监听 正在运行 已编译 的 Matlab 可执行文件中的标准输入流 我相信这就是完成的方式c或类似的语言 include stdio h fgets line 256 stdin 或者更详细地说 它可以这样使
  • std::bind 类内部的静态成员函数

    我正在尝试存储一个函数以便稍后调用 这是一个片段 这工作正常 void RandomClass aFunc int param1 int param2 double param3 bool isQueued false If some co
  • Maven 生成实际的 jar 作为 .jar.original 而不是 .jar 文件

    基本上我有一个 Maven 项目 我正在尝试使用生成我的项目的 jarmvn clean compile package通过 spring 工具套件使用下面的 pom xml 执行命令后 我在我的目录中生成了2个jar文件target文件夹
  • Crashlytics iOS - 第 0 行崩溃 - Swift 源

    我目前在某些 Swift 源文件发生崩溃时遇到问题 事实上 在 Crashlytics 上我有一个关于线路和崩溃原因的奇怪信息 它告诉我源已经崩溃了line 0它给了我一个SIGTRAP错误 我读到当线程遇到断点时会发生此错误 但问题是 当
  • System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity 的奇怪问题

    我们正在编写一个系统 允许用户通过 Intranet 上的 Web 应用程序更改其帐户密码 起初 一切似乎都进展顺利 在开发过程中 我们的测试帐户的密码可以毫无问题地更改 然而 当我们让系统上线时 我们开始遇到问题 以下是症状 起初 一切都
  • SQL服务器触发器

    我有一个这样的表结构 create table status master Name varchar 40 status varchar 10 如果状态列值更新值 我需要为状态列创建触发器 如果失败 则触发器调用一个插入命令 例如 inse
  • 如何在空间和频率域中的每个尺度和方向创建 64 个 Gabor 特征

    通常 Gabor 滤波器 顾名思义 用于过滤图像并提取与过滤方向相同的所有内容 在这个问题中 您可以看到比此中编写的代码更有效的代码Link 假设 4 个方向上有 16 个尺度的滤波器 因此我们得到 64 个 gabor 滤波器 scale
  • 何时使用 FormGroup 与 FormArray?

    表格组 A 表格组将每个子 FormControl 的值聚合为一个 对象 以每个控件名称作为键 const form new FormGroup first new FormControl Nancy Validators minLengt
  • python 守护进程中的子进程终止

    我在 python 中有damon 它运行外部程序 subprocess call java jar start jar 当我杀死守护进程时 子进程 java 仍在运行 我怎样才能让子进程也被杀死 Use subprocess Popen
  • 使用 Rspec 测试 rake 任务不接受参数

    根据我的说法 我正在尝试为我的 rake 任务之一编写 Rspec 测试斯蒂芬 哈格曼的这篇文章 lib tasks retry rake namespace retry do task message message id gt envi
  • 寻找最小全语法窗口的有效算法?

    A 全语法窗口是包含所有 26 个字母表的较大文本片段的子字符串 引用维基百科的一个例子 给出以下文本 我唱了 还以为自己唱得很好 但他只是用一种非常好奇的表情抬头看着我的脸 然后说 你唱歌多久了 小姐 文本中最小的全语法窗口是这个字符串
  • 错误:此模板尝试加载组件程序集“Microsoft.VisualStudio.SmartDevice”

    我安装了 Visual studio 2015 并尝试为 Windows Phone 8 1 创建测试应用程序 当我创建一个新项目时 我收到以下消息 关于如何解决这个问题有什么建议吗 这是解决方案 打开 Visual Studio 并转到T
  • 使用反射添加EventHandler

    我有这段代码不起作用 public CartaoCidadao InitializeComponent object o WebDAV Classes SCWatcher LoadAssembly MethodInfo method thi
  • SonarQube -integrationTest.exec -sonar Runner (Gradle) 或“sonar-runner”命令 - 显示 0.0% 覆盖率

    运行基于 Gradle 的构建和集成测试后 我在 build jacoco 文件夹中成功生成了 Jacoco 的 2 个 exec 文件 梯度命令 gradle clean 构建集成测试 完成后 它会在 build jacoco 文件夹下生