PHPUnit代码覆盖生成导致内存耗尽

时间:2010-10-08 23:49:50

标签: php zend-framework jenkins phpunit hudson

我目前正在使用Zend Framework与PHPUnit一起对应用程序进行单元测试。当Hudson执行PHPUnit shell命令时,在代码覆盖生成期间的某个时间达到最大PHP内存限制。我目前总共有41个测试,有334个断言。

我已成功消除了此错误,方法是使用-d memory_limit=768M开关将memory_limit设置提高到768M;但是,我担心随着复杂性的增加以及测试/断言的总数,我将没有足够的内存来生成用于代码覆盖率统计的HTML。

OS: CentOS 5.5
控制面板: WHM / cPanel
CI服务器: Hudson

/usr/local/bin/phpunit 
  --verbose  
  -d memory_limit=512M  
  --log-junit ../../build/logs/phpunit.xml   
  --coverage-clover ../../build/logs/coverage/clover.xml   
  --coverage-html ../../build/logs/coverage-html/  
  

致命错误:允许的内存大小为   耗尽536870912个字节

在提交我的更改并让Hudson处理其余的更改之前,我使用Windows 7进行开发。在W7中运行相同的命令时,内存使用率从未超过340MB。

3 个答案:

答案 0 :(得分:16)

通过减少代码覆盖率中包含的文件数量,以及增加PHP中的整体内存限制,我基本上可以消除此错误。整个Zend Framework被包含在代码覆盖范围内,这非常大。

答案 1 :(得分:1)

您是否启用了xdebug配置文件,如果是,请尝试禁用它。我之前遇到过这个问题,它归结为php中的扩展(特别是xdebug profiling和/或Inclued heirarchy viewer)

答案 2 :(得分:0)

从2019年开始,您可以将PCOV驱动程序与PHPUnit结合使用来生成代码覆盖率报告。以我的经验,它的性能仅比运行普通的PHPUnit套件略低。

请阅读Speed up PHPUnit Code Coverage Analysis,以比较XDebug,PHPDebug和PCOV。它还说明了如何在PHPUnit 8上启用PCOV。

阅读Setup PHP PCOV for 5 times faster PHPUnit code coverage ,了解有关在PHPUnit7及更低版本上设置PCOV的说明。