用JaCoCo合并集成、单元和功能测试报告

2,071 阅读5分钟

jaco and co :)

代码覆盖率是任何软件开发中的一个重要方面。它告诉你有多少代码被你的测试所执行。作为一种工具,它在单元/集成测试的开发过程中是非常有用的,因为它有助于突出你的测试可能错过的代码路径。

例如,如果你测试的代码有一个_if...then...else_条件,而你的测试用参数调用代码,导致_if_条件块被测试,但不是_else_块,代码覆盖率有助于突出未测试的代码。

有很多工具可以生成代码覆盖率报告。JaCoCo是一个免费的Java代码覆盖库,它是由EclEmma团队根据多年来使用和整合现有库的经验而创建的_。_

在maven项目的pom.xml中配置jacoco,以生成单元和集成的覆盖率报告,这对于开始使用jacoco是很容易的。但是,在某些时候,你需要一份合并的报告,将单元、集成和功能测试报告一并考虑在内。

在这篇博客中,我们将讨论生成单元、集成和功能测试单独覆盖报告所需的配置选项。由于我们使用不同的测试框架,如Junit和Cucumber/KarateJacoco也将有助于生成一个整体的覆盖率报告,整合合并的覆盖率数据。

设置

我们要建立的多模块maven项目由3个maven模块组成。

module1 和_module2_由一个带有一些功能的java域类组成,并有各自的单元集成测试类。

模块3 由cucumber功能测试组成,还包含合并jacoco报告的配置。

pom模块和属性的片段看起来像下面这样。

主pom.xml

我们还配置了一些pom配置文件,这将有助于激活_单元_、集成测试_和_testAll 配置文件。

我们将配置单元测试和集成测试的配置文件。

配置surefire插件

Surefire插件是在构建生命周期的测试阶段用于执行应用程序的单元测试。我们可以使用excludes属性排除那些我们不希望surefire插件在测试阶段包含的测试文件。

surefire插件

配置故障安全插件

_Failureafe_插件用于项目的集成测试**。**它有两个目标。

  1. _integration-test -_这个目标默认是绑定在_集成测试阶段_的。
  2. _verify -_验证集成测试是否通过。这个目标默认与_验证_阶段绑定。

故障安全插件

包括jacoco插件

Jacoco将测试覆盖率数据的收集与覆盖率报告的生成分开。下面的块告诉jacoco启动单元测试和集成测试的代理。

jacoco代理初始化。

现在,我们在模块3中配置jacoco插件来执行cucumber测试,有一个关于_argLine_的重要说明,应该注意并牢记。_argLine_有助于保持测试执行的命令行参数,随后有助于生成合并报告。

现在,我们将在模块3中配置jacoco maven插件,用于合并和汇总不同执行步骤的jacoco报告。现在,我们将在插件中添加不同的目标。

report-aggregate:从reactor内的多个项目中创建结构化的代码覆盖报告(HTML、XML和CSV)。该报告是由该项目依赖的所有模块创建的。

report-aggregate

合并。这个目标有助于将一组执行数据文件(*.exec)合并成一个文件。

因为每个模块都有一个由jacoco生成的单独的*.exec文件。这个_合并_ 目标将那些在includes属性中指定的文件合并成一个单一的聚合文件,并放到destFile中的指定位置。

合并报告。

我们也可以从日志中获得目标_报告--聚合和_合并的 视图,看起来像下面这样。

聚合和合并日志。

现在,为了增加一层额外的条件,你可以在插件中添加一个检查目标,它将验证执行块内给出的规则,如果不符合规则,则构建失败。dataFile属性指定了合并报告的位置,规则将被检查。

检查执行。

至此,jacoco的插件配置结束。你可以查看源代码,了解项目中使用的依赖的确切列表。

现在如果你运行mvn clean install -P testAll,这将激活_testAll_ 配置文件并生成jacoco合并报告。

现在你可以通过打开_module3/target/site/jacoco-aggregate/index.html_文件在浏览器中查看合并后的报告。

index.html

现在我们将尝试忽略模块3的黄瓜测试,看看对jacoco报告的影响。你可以通过简单地忽略特征文件中指定的标签来实现这一目的。运行这个命令:mvn clean install -P testAll -Dcucumber.options="--tags ~@Concatenation"

忽略cucumber测试。

结果显示_模块1_ 的函数连接没有被调用,因此覆盖率降低,构建失败。

总结

我们已经看到了如何配置jacoco以及fail safe和sure fire插件来获得maven项目的整体代码覆盖率。如果您需要jacoco的其他配置及其规则,请访问官方文档。我们也试图通过使用cucumber测试框架来提高_模块1_ 和_模块3_ 的覆盖率。如果使用Karate API测试框架而不是cucumber,也会采用类似的方法。要了解更多关于Karate与Spring boot的集成,请访问我的repo

源代码可在此获得。学习愉快!!