从 运行 实际应用验收测试中获取 jacoco 报告

Get jacoco report from running acceptance test on real application

我是 sonar 和 jacoco 的新手,我找不到以下问题的答案

我们将使用 sonar 和 jacoco 来分析我们的测试覆盖率。

我们将进行三种测试:单元测试、集成测试(使用 spring 启动测试)和我们将 运行 在实际应用程序实例上进行的验收测试。我们想要合并测试结果。为单元和集成测试生成 jacoco 文件不是问题,因为它们可以访问源代码。我们可以将这些报告合并到声纳中。

我的问题是,是否可以为与实际应用程序交互的验收测试生成 jacoco 文件?也许您会 link 知道如何去做?

我目前最好的想法是 运行 在实际应用程序和嵌入式应用程序上进行两次验收测试,并从嵌入式应用程序中获取报告。但也许有更好的解决方案。 谢谢,

JaCoCo 能够记录 Java 应用程序的任何类型的执行 - 您只需要使用 agent 启动此应用程序,例如:

java -javaagent:jacoco-0.8.0/lib/jacocoagent.jar -cp classes Main

默认情况下,在应用程序终止时,这将生成包含执行数据的文件 jacoco.exec。还有.

互联网上有很多在各种情况下使用代理的示例 - Spring Boot, Tomcat, Weblogic

之后可以使用此执行数据生成报告 jacoco.execexactly the same class files that were used at runtime for generation of execution data. For example using JaCoCo command line interface (there are also Ant tasks, Gradle plugin, Maven plugin):

java -jar jacoco-0.8.0/lib/jacococli.jar \
    report \
    jacoco.exec \
    --classfiles classes \
    --html report

可以在没有源文件的情况下生成报告,但在这种情况下,您将无法向下钻取到低于方法级别的粒度:

带有源文件的报告:

jacoco-0.8.0/lib/jacococli.jar \
  report \
  jacoco.exec \
  --classfiles classes \
  --html report \
  --sourcefiles src

现在关于 SonarQube:它执行 exec 和 class 文件的分析,因此 要求 class 文件与运行时使用的文件相同 用于生成 exec 文件。因此,您需要保证 SonarQube 分析是针对与正在测试的 class 完全相同的文件执行的。