我目前正在使用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。
答案 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的说明。