如何提高 Codeception 代码覆盖率速度

3

目前我们使用codeception写了一些单元测试,测试的是我们的php laravel 5.5应用程序。额外说明一下,我们的laravel代码库大约有20万行代码。对于普通的单元测试运行,我们发现它非常快,可以在1小时内完成超过200个测试。

但是主要问题在于,当我们启用codeception中默认使用xdebug的代码覆盖率时,我们注意到执行时间大大增加。

现在已经花费了一周的时间,但整个代码覆盖率的执行仍未完成。

我不确定这是否是codeception或xdebug本身的问题,但如果有任何人有在大型代码库上运行php代码覆盖率的经验,如果您能分享一下您是如何做到的,那将非常好。如果有人能建议其他工具供我们考虑,我们将不胜感激。目前我们正在考虑转换到phpunit,但仍然对其他工具保持开放态度。

2个回答

2
用PHPUnit替换Codeception工作量很大,而且收益很小,因为Codeception在底层使用PHPUnit和它的PHP-Code-Coverage库。 现在有一个新的代码覆盖扩展叫做pcov,据说比xdebug快得多。 https://github.com/krakjoe/pcov/blob/develop/INSTALL.md 我还没有尝试过使用它,但请注意,它需要PHPUnit 8,该版本仅适用于PHP 7.2或更高版本。

这是否意味着目前在PHP上没有已知的代码覆盖工具可以在大型代码库上运行?我们另一个想法是将单块应用程序拆分为微服务,但这将需要对整个应用程序进行重大改写。无论如何,感谢您的回复。 - AlamHo
1
您可以在任何大小的代码库上使用 pcov…… 您还可以在 PHPUnit 8 之前(测试至6.5)的版本上使用 pcov,只需进行一些 Hackery,请参阅 https://github.com/krakjoe/pcov-clobber 中的内容… 我的建议是(我编写了 pcov),尽快更新到 PHPUnit 8。 - Joe Watkins

1
最近我看到有人用phpdbg替换xdebug来加速代码覆盖率,但由于测试运行中包含了大量功能测试,我无法给出确切的数字(且这种加速只针对单元测试),但一个超过两个小时的测试和覆盖率运行现在只需要约50分钟。

请注意,xdebug和phpdbg在代码覆盖率方面可能存在差异(看起来xdebug更好地处理了opcache优化)。
编辑:
自从使用phpdbg替换xdebug以来,我通过将phpdbg替换为pcov而看到了进一步的速度提升。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接