2013-08-26 60 views
11

我试图使用Sonar和Jenkins获得代码覆盖率。我看到Jenkins的Sonar插件成功执行JUnit测试用例并成功完成构建。但Sonar不会在项目中显示代码覆盖率结果(总是显示代码覆盖率为0.0%)。但声纳确实显示“单元测试成功”。Sonar在Jenkins Sonar插件成功构建后未显示代码覆盖率

我正在与Jenkins和Sonar一起使用Maven。

我得到詹金斯日志下面的消息在执行声纳插件:

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

任何一个可以帮助我如何获得任何声纳项目正确的代码覆盖率。

+0

您是否阅读过http://docs.codehaus.org/display/SONAR/Code+Coverage+by+Unit+Tests+for+Java+Project并尝试相关项目样本?如果是这样,你能否提供更详细的信息:日志文件,在你的pom文件中配置SonarQube,你如何运行SonarQube:mvn clean install/mvn sonar:sonar? SonarQube等版本? –

+0

我阅读http://docs.codehaus.org/display/SONAR/Code+Coverage+by+Unit+Tests+for+Java+Project,并使用cobertura作为我的代码覆盖率插件,然后我看到代码覆盖显示小项目。当我在声呐中检查大型项目时,我只看到代码覆盖 - 这意味着它的empty.in日志中可以找到Cobertura报告没有在.../coverage.xml路径中找到。这是什么原因呢。显示上面的消息之前,cobertura插件仪表进行得很顺利。 – Venkat

+1

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

回答

2

我读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时,声纳会显示代码覆盖率。

0

而不是使用Jenkins声纳插件来运行声纳,试着通过执行声纳目标来做到这一点。通常情况下,设置一个额外的构建步骤并调整所有路径,直到声纳找到所有相关文件为止更容易。

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

+0

感谢您回复我的问题。我曾尝试执行mvn声纳:声纳。但是我没有运气,因为没有JaCoCo执行数据被抛弃​​,项目覆盖率被设置为0%:/user/mysys/.jenkins/jobs/../workspace/.../sonar/目标/ jacoco.exec。是的,它读取单元测试结果,但代码覆盖失败。 – Venkat

8

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

尝试直接执行JaCoCo。你可能会发现,为什么JaCoCo直接失败:

mvn jacoco:prepare-agent test jacoco:report

JaCoCo将放置jacoco.exec以及目标/ jacoco内的XML/HTML报告。或者它会失败,并希望你会有一个更好的主意,为什么。

一个非常普遍的问题是,如果你已经改变了神火argLine在所有JaCoCo javaagent将无法运行,因为jacoco:prepare-agent仅设置argLine财产在这种情况下,方便地忽略。您可以设置准备代理的propertyName财产别的东西(如jacocoArgLine)和包括在你argLine配置

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

0

根据这一blog post,你可能忘了设置sonar.binaries属性在项目属性

Don’t forget sonar.binaries, otherwise, you might get something like « Project coverage is set to 0% since there is no directories with classes. » in your logs.

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

你的声纳插件无法找到Jacoco生成的报告文件。

在你的pom(父母或小孩)寻找标记jacoco/prepare-agent执行。将名称和位置更改为target/jacoco.exec,您便可以轻松前往!