Sonar + jacoco代理覆盖非Web服务模块

时间:2012-12-27 14:17:44

标签: code-coverage sonarqube functional-testing multi-module jacoco

我正在尝试通过向Jetty添加"-javaagent..."并运行外部Selenium测试(或者,例如,手动测试)来使用JaCoCo代理来收集网站的FT代码覆盖率。

在测试结束时,我只有网络模块的结果,实际上是在Jetty中运行,而不是在web模块中使用的“核心”模块(在同一个项目中)。那么,是否有能力收集项目所有模块的调用?

事实上,我现在尝试使用相同的JaCoCo报告目的地(即/tmp/jacoco-res.exec),append=true启动所有项目Web服务(它有5个)并运行:

mvn sonar:sonar -Dsonar.jacoco.itReportPath=/tmp/jacoco-res.exec

因此,声纳现在为项目中的每个模块使用相同 JaCoCo报告文件,声纳显示了jetty-run和核心模块的测试覆盖率。

此方法是否适用且覆盖率结果是否正确?

1 个答案:

答案 0 :(得分:2)

几天前,我在Sonar User forum上提出了一个类似的问题。

简而言之,您的方法是正确的,也是由Sonar顾问提出的(可以在帖子上看到)。

  • 对每个Maven项目执行声纳分析。
  • 对于每个分析,重复使用该报告并传递您的JaCoCo报告(使用-Dsonar.jacoco.itReportPath)
  • Sonar将从此JaCoCo报告中检索 与正在分析的Maven项目相关的覆盖数据。 (你的一个核心项目)
  • 因此,对于每个Maven项目,您将通过集成测试获得覆盖率。
  • 最后,通过集成获取Web服务的覆盖范围 测试,你将不得不使用Views插件: http://www.sonarsource.com/products/plugins/governance/portfolio-management/
  • 创建一个视图,该视图是所有Maven的聚合 组成Web服务的项目。
  • 对其中一个进行声纳分析 Maven项目是为了让Sonar计算视图。
  • 在视图仪表板上,您将能够获得代码覆盖率 您的集成测试提供的Web服务。