gpt4 book ai didi

code-coverage - 合并多个 jacoco 代理报告以供 SONAR 使用?

转载 作者:行者123 更新时间:2023-12-02 04:29:03 26 4
gpt4 key购买 nike

我正在跨多个虚拟机运行自定义并行系统测试,并使用 jacoco 代理对我们编译的应用程序执行运行时分析。这些代理中的每一个都将生成自己的 report.exec,并具有相应的覆盖范围,我们想要一种方法来表示整个项目(在 SONAR 中)的整体“集成测试”覆盖范围。

这项工作仍处于规划阶段,因此我正在尽最大努力制定路线图。我知道 ant/maven 构建使报告合并变得容易,但是由于我们测试环境的性质,要求使用 jacoco agent 生成运行时覆盖率。

我到处搜索适用于这种情况的解决方案,但似乎几乎所有属于此 jacoco/sonar 类别的问题都有其独特的条件,而且几乎没有人对使用 jacoco 代理有任何兴趣.

代理将以 tcpserver 模式运行,主客户端负责编排转储和报告输出。如果此客户端配置为输出到单个文件,这些报告是否会自动附加/合并为一个文件?是否存在用于合并多个覆盖率报告的 API 或独立项目,我可以将其集成到不依赖于 ant 或 maven 的客户端中?

或者,是否有 SONAR 配置来接受这种性质的多个报告并通过代码行合并它们的覆盖范围?在父 pom.xml 中定义每个单独的报告,或者只是给它一个包含整个集合的文件夹的路径,然后让 SONAR 对其进行排序?

我愿意接受这个问题没有简单的解决方案,但是除了必须编写我自己的合并功能之外的任何事情都会真正帮助这个项目起步。

E:可能值得一提的是,我们不会生成任何实际的 HTML/XML/等。报告,只是我们将提供给 SONAR 的可执行文件。

最佳答案

如果您使用的是 Gradle,则必须先 merge the Jacoco execution数据,然后告诉 sonarqube 使用它而不是每个子模块生成的单独的 exec 文件。

这是它的样子:

def allTestCoverageFile = "$buildDir/jacoco/allTestCoverage.exec"

sonarqube {
properties {
property "sonar.projectKey", "your.org:YourProject"
property "sonar.projectName", "YourProject"
property "sonar.jacoco.reportPaths", allTestCoverageFile
}
}

task jacocoMergeTest(type: JacocoMerge) {
destinationFile = file(allTestCoverageFile)
executionData = project.fileTree(dir: '.', include:'**/build/jacoco/test.exec')
}

task jacocoMerge(dependsOn: ['jacocoMergeTest']) {
// used to run the other merge tasks
}

subprojects {
sonarqube {
properties {
property "sonar.jacoco.reportPath", allTestCoverageFile
}
}
}

简而言之:

  • 首先,我们为测试报告定义一个全局覆盖文件输出 (allTestCoverageFile)。
  • 然后我们需要告诉 Sonarqube 使用该文件(使用 sonar.jacoco.reportPaths)。但请注意,我们还必须在子项目关闭时执行此操作。这是非常重要的。不要错过。
  • 最后,我们创建了一个自定义任务,它从 JacocoMerge(Jacoco 插件的孵化类)扩展而来,它合并了所有项目的所有测试覆盖率报告(executionData ) 到我们的 allTestCoverageFile

关于code-coverage - 合并多个 jacoco 代理报告以供 SONAR 使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24640033/

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