聚合来自不同测试框架的代码覆盖率

Posted

技术标签:

【中文标题】聚合来自不同测试框架的代码覆盖率【英文标题】:Aggregating code coverage from different testing frameworks 【发布时间】:2016-01-04 01:44:33 【问题描述】:

在现代编程工作流程中,同时使用了许多测试框架。例如,在 php 世界中,同时使用单元测试、集成测试和功能/验收测试是事实上的标准方式。大多数时候,不同的框架用于不同的测试类型。我将 PHPSpec 用于单元,PHPunit 用于集成,CodeCeption 用于功能测试。

是否可以汇总每个框架返回的代码覆盖率结果?是否有任何工具可以汇总来自不同框架的代码覆盖率报告? 或者,由于每个代码覆盖率报告都没有考虑其他测试,因此只能查看每个框架的单个结果,因为它们不正确。

【问题讨论】:

【参考方案1】:

执行此任务实际上非常简单。您的所有框架都依赖同一个库来生成代码覆盖率。

如您所见,sebastianbergmann/php-code-coverage 中的生成器已经支持合并函数(第 335 行)来合并不同的聚合。由于您是使用测试的团队的一员,我认为您可以轻松地稍微更改测试执行层以在单个 php 进程中收集代码覆盖率并合并它们。

【讨论】:

【参考方案2】:

有一个工具可以做到这一点:phpcov。它允许使用合并选项合并许多覆盖文件:

$ parallel --gnu :::                                                 \
'phpunit --coverage-php /tmp/coverage/FooTest.cov tests/FooTest' \
'phpunit --coverage-php /tmp/coverage/BarTest.cov tests/BarTest'

$ phpcov merge /tmp/coverage --clover /tmp/clover.xml
phpcov 2.0.0 by Sebastian Bergmann.

Generating code coverage report in Clover XML format ... done

【讨论】:

【参考方案3】:

我认为我们在同一条船上。我们如何知道使用这个不同的测试工具我们已经收敛了多少。我们开始与团队讨论并决定去

SonarSource。 - 用于 PHP 插件和现场演示

PHP Report Stlyle - 我建议您访问现场演示。会有更多帮助。

这是一个非常强大的工具。它为我们提供了代码内部的所有内容。

【讨论】:

你的回答现在看起来像一则广告。您能否提供更多信息,它是如何回答这个问题的?您的截图全是 Java,请告诉我们更多它可以为 PHP 做什么。 回答您的问题只需打开我在这篇文章中添加的链接或转到此链接:nemo.sonarqube.org(DEMO)当您单击 PHP 时,它将显示所有组件覆盖率。 Sonar Source 专为所有技术而设计。【参考方案4】:

来自 Semantic Designs(我的公司)的 PHP Test Coverage Tool 收集并组合来自任何地方的测试覆盖率

框架 测试集 单独测试 甚至临时手动测试。

在运行了一组测试之后,我们的工具可以很容易地被触发来将测试覆盖向量转储到一个文件中;您需要稍微修改框架才能调用

TCVDump();

当框架完成时,或者您可以通过触摸由测试覆盖工具添加的易于找到的特殊网页来调用 TCVDDump()。每个这样的调用都会生成一个时间戳或用户命名的文件(例如,在框架或测试集之后),因此它们很容易区分

作为工具的一部分包含的图形测试覆盖率显示将交互式地选择和合并小或大的此类文件集,以产生一个连贯的整体,包括显示和摘要。它还将比较测试覆盖向量,以使一个人能够确定一个测试集的覆盖率是否包含/与另一个测试集相交等。 测试覆盖率显示组件还将导出覆盖率结果的文本或 XML/html 摘要。

您甚至可以在不同的子系统上运行测试并将它们组合起来。这个测试覆盖率工具是 PHP 以外的许多语言的更大的工具系列的一部分;还可以组合在多语言应用系统上运行的测试,以提供多语言应用的覆盖率概览。

【讨论】:

以上是关于聚合来自不同测试框架的代码覆盖率的主要内容,如果未能解决你的问题,请参考以下文章

Behave测试框架的测试覆盖工具

代码覆盖率VS测试覆盖率

是否可以将来自两个可执行文件的覆盖率数据与 gcov/gcovr 合并?

Azure DevOps:如何为不同的测试(.net core、angular)合并两个代码覆盖率报告

您可以在 Visual Studio 构建过程中“覆盖”来自不同文件夹的代码吗?

究竟测试要不要追求对代码的高覆盖率