使用Jenkins Sonar插件构建成功后,Sonar没有显示代码覆盖率

时间:2013-08-26 14:03:40

标签: code-coverage sonarqube

我正在尝试使用Sonar和Jenkins进行代码覆盖。我看到Jenkins的Sonar插件成功执行JUnit测试用例并成功完成构建。但是Sonar没有在项目中显示代码覆盖率结果(总是显示0.0%作为代码覆盖率)。但是声纳确实显示出“单元测试成功”。

我正在和詹金斯和声纳一起使用Maven。

我在执行Sonar插件时在Jenkins日志中收到以下消息:

Project coverage is set to 0% as no JaCoCo execution data has been dumped: .../sonar/target/jacoco.exec

任何人都可以帮助我如何在任何Sonar项目上获得正确的代码覆盖率。

5 个答案:

答案 0 :(得分:9)

仅仅因为Sonar正确调用了Surefire(并且您收到了“单元测试成功”消息)并不意味着JaCoCo检测了您的代码。

尝试直接执行JaCoCo。您可能会发现JaCoCo直接失败的原因:

mvn jacoco:prepare-agent test jacoco:report

JaCoCo将在 target / jacoco 中放置 jacoco.exec 及其XML / HTML报告。或者它会失败,希望你能更好地了解原因。

一个非常常见的问题是,如果您根本没有更改Surefire argLine,JaCoCo javaagent将无法运行,因为jacoco:prepare-agent只设置 argLine 属性,在此方案中,方便地忽略了您可以将prepare-agent的propertyName属性设置为其他内容(例如 jacocoArgLine ),并在argLine配置中包含

<argLine>-Xmx1024m ${jacocoArgLine}</argLine>

答案 1 :(得分:3)

我阅读https://docs.sonarqube.org/display/PLUG/Code+Coverage+by+Unit+Tests+for+Java+Project并使用cobertura作为我的代码覆盖插件然后我看到小项目的代码覆盖显示。当我在声纳中检查一个大项目时,我只看到代码覆盖率 - 这意味着它是空的。在日志中,我发现在/.../coverage.xml路径中找不到Cobertura报告。

由于OutOfMemeryError:heapspace而未生成coverage.xml。由于我的项目是如此大的项目,当我将堆内存设置为2GB并且cobertura插件内存为1.5GB声纳时,会显示代码覆盖率。

答案 2 :(得分:1)

您的Sonar插件无法找到Jacoco生成的报告文件。

在您的pom(父母或子女)中查找<destFile>执行下的jacoco/prepare-agent标记。将名称和位置更改为target/jacoco.exec,您就可以开始了!

答案 3 :(得分:0)

不是使用Jenkins声纳插件来运行声纳,而是通过执行声纳目标尝试使用maven。通常这比设置一个额外的构建步骤和调整所有路径更容易,直到声纳找到所有相关文件。

在你的情况下,我猜它可以读取junit / testng报告,但找不到jacoco结果(jacoco.exec)。路径声纳输出(../sonar/target/jacoco.exec)是否正确?

答案 4 :(得分:0)

根据此blog post,您可能忘记在项目属性中设置sonar.binaries属性

  

不要忘记sonar.binaries,否则,您可能会得到类似«项目覆盖率设置为0%,因为没有类的目录。 »在你的日志中。

[...]
sonar.surefire.reportsPath=target/surefire-reports
sonar.jacoco.reportPath=target/jacoco.exec
sonar.binaries=target/classes
[...]