gpt4 book ai didi

java - SonarQube 不接受外部生成的 JaCoCo 报告以覆盖 IT

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:03:40 25 4
gpt4 key购买 nike

至少可以说,我为解决这个问题付出了艰辛的努力,而且我已经仔细阅读了我可以在网上找到的每一个支持文档。我会马上去做的。我们正在运行黑盒测试……很多黑盒测试……从它们生成代码覆盖率的唯一方法是以老式方式将 JaCoCo 代理传递给 JVM。

我们没有使用故障保护来运行这些测试,而是使用内部套件。这是一个多模块 maven 项目,这意味着这个 JaCoCo exec 文件是在 groupId/artifactId 层次结构中生成的:

  • /com/mycompany/artifact1/...
  • /com/mycompany/artifact2/...

等等。

但是,项目主干显然不符合这种结构。像这样从 exec 文件手动生成 HTML 报告有点棘手(因为您只能为它提供一个源目录,它会期望在根目录中看到一个“com”文件夹,)但这是完全合理的,非常有可能,并且已经完成。

但是当我们用参数触发 Sonar 分析时

-Dsonar.itReportPath=/opt/jacoco/it-report.exec -Dsonar.dynamicAnalysis=reuseReports

Sonar JaCoCo 插件产生了令人失望的结果:

[INFO] [21:34:28.406] Sensor JaCoCoItSensor...
[INFO] [21:34:28.406] Project coverage is set to 0% as no JaCoCo execution data has been dumped: /opt/jacoco/it-report.exec
[INFO] [21:34:28.444] No information about coverage per test.

理论现在变得疯狂,但我想在我犯下另一个错误之前在这里尝试一下,因为我们的构建过程有一百个移动部件并且无缘无故地重新配置它会浪费很多很多工作时间。

之所以如此令人沮丧,是因为我发现几乎所有处理 Sonar 中 IT 覆盖的解决方案似乎都遵循相同的陈词滥调公式:

  1. 将 JaCoCo 代理附加到 JVM
  2. 定义指向报告的 sonar.jacoco.itReportPath 属性
  3. 按下按钮
  4. 享受 IT 保障

我们正在使用 SonarQube 3.6.1,我们将尝试尽快升级到 4.5。这是第一步。与此同时,有人知道这是怎么回事吗?Sonar 有什么理由不重用这份报告吗?目录层次结构有那么重要吗?找到嵌套在文件树中的 groupID 文件夹并不难。这是升级到 4.5 就可以解决的问题吗?

我快没油了,我会很感激我能得到的任何东西。

编辑 1:尝试从代理分析中将第 3 方 jar 列入黑名单。这会很痛苦。我不确定 JaCoCo agent -include 标志是否会自动排除该范围之外的任何内容,但我自己将该功能构建到 JaCoCo 中可能更容易,而不是挖掘存在的许多第 3 方 groupId 并将它们全部列入黑名单(然后必须一直维护它。)

我有一种很好的感觉,当 SonarQube 看到第 3 方覆盖时,它会拒绝执行文件。

编辑 2:成功将来自 JaCoCo 分析的第 3 方类列入黑名单。

[INFO] [10:34:05.347] Sensor JaCoCoItSensor...
[INFO] [10:34:05.352] Project coverage is set to 0% as no JaCoCo execution data has been dumped: /opt/jacoco/it-report.exec
[INFO] [10:34:06.179] No information about coverage per test.

没有。

最佳答案

因为我使用 maven surefire 来执行 jacoco,所以我真的无法提供很好的解释,但是当我在

  1. 将 jacoco junit 监听器添加到 surefire 和
  2. 确保报告被写入一个位置并且每次运行都会追加

我在想第二部分可能对你有用(即将结果附加到一个位置)

如果您需要灵感,请在下方找到我使用的个人资料。

  <profile>
<!-- ========================================================================= -->
<!-- Use shared code coverage report in sonarQube -->
<!-- This profile enables cross project coverage reports, -->
<!-- ========================================================================= -->
<id>sonar-jacoco-analysis</id>
<properties>
<!-- Sonar -->
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
<sonar.language>java</sonar.language>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.6.3.201306030806</version>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
<append>true</append>
</configuration>
<executions>
<execution>
<id>agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<!-- Minimal supported version is 2.4 -->
<version>2.13</version>
<configuration>
<properties>
<property>
<name>listener</name>
<value>org.sonar.java.jacoco.JUnitListener</value>
</property>
</properties>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.codehaus.sonar-plugins.java</groupId>
<artifactId>sonar-jacoco-listeners</artifactId>
<version>1.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</profile>

关于java - SonarQube 不接受外部生成的 JaCoCo 报告以覆盖 IT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25074146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com