我正在尝试使用 JaCoCo 代理来收集网站的 FT 代码覆盖率,方法是将 "-javaagent..."
添加到 Jetty 并运行外部 Selenium 测试(或者,例如,手动测试)。
在测试结束时,我仅得到了实际在 Jetty 中运行的 Web 模块的结果,但没有得到 Web 模块中使用的“核心”模块(在同一项目中)的结果。那么,是否有能力收集项目所有模块的调用?
事实上,我现在尝试使用相同的 JaCoCo 报告目标(即 /tmp/jacoco-res.exec
)启动所有项目 Web 服务(它有 5 个),append=true
并运行:
mvn sonar:sonar -Dsonar.jacoco.itReportPath=/tmp/jacoco-res.exec
因此, Sonar 现在对项目中的每个模块使用相同 JaCoCo 报告文件,并且 Sonar 显示了 jetty-run 和核心模块的测试覆盖范围。
此方法适用且覆盖结果正确吗?
最佳答案
我在 Sonar User forum 上提出了一个类似的问题几天前。
简而言之,您的方法是正确的,也是由 Sonar 顾问提出的(如帖子中所示)。
- 对每个 Maven 项目执行 Sonar 分析。
- 对于每个分析,重复使用报告并传递您的 JaCoCo 报告(使用 -Dsonar.jacoco.itReportPath)
- Sonar 将从 JaCoCo 报告中检索 与正在分析的 Maven 项目相关的覆盖数据。 (您的核心项目之一)
- 因此,对于每个 Maven 项目,您都将通过集成测试获得覆盖率。
- 最后,通过集成获得网络服务的覆盖范围 测试时,您必须使用 Views 插件: http://www.sonarsource.com/products/plugins/governance/portfolio-management/
- 创建一个 View ,它是所有 Maven 的聚合 组成 Web 服务的项目。
- 对其其中一个进行 Sonar 分析 Maven 项目以便 Sonar 计算 View 。
- 在 View 仪表板上,您将能够获取代码覆盖率 通过您的集成测试来了解 Web 服务。
关于code-coverage - 非 Web 服务模块的 Sonar + jacoco 代理代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14056092/