我有一个带有一些功能测试的Symfony2项目 当我在没有启用代码覆盖的情况下运行测试套件时,没有问题。 但是当我尝试生成代码覆盖时,我收到一个PHP致命错误:
Generating code coverage report, this may take a moment.
PHP Fatal error: Allowed memory size of 209715200 bytes exhausted
(tried to allocate 79 bytes) in /usr/share/php/PHP/Token/Stream.php on line 205
PHP Stack trace:
PHP 1. {main}() /usr/bin/phpunit:0
PHP 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:46
PHP 3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:130
PHP 4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:192
PHP 5. PHP_CodeCoverage_Report_HTML->process() /usr/share/php/PHPUnit/TextUI/TestRunner.php:373
PHP 6. PHP_CodeCoverage->getReport() /usr/share/php/PHP/CodeCoverage/Report/HTML.php:133
PHP 7. PHP_CodeCoverage_Report_Factory->create() /usr/share/php/PHP/CodeCoverage.php:141
PHP 8. PHP_CodeCoverage_Report_Factory->addItems() /usr/share/php/PHP/CodeCoverage/Report/Factory.php:76
PHP 9. PHP_CodeCoverage_Report_Factory->addItems() /usr/share/php/PHP/CodeCoverage/Report/Factory.php:98
PHP 10. PHP_CodeCoverage_Report_Node_Directory->addFile() /usr/share/php/PHP/CodeCoverage/Report/Factory.php:94
PHP 11. PHP_CodeCoverage_Report_Node_File->__construct() /usr/share/php/PHP /CodeCoverage/Report/Node/Directory.php:211
PHP 12. PHP_CodeCoverage_Util::getLinesToBeIgnored() /usr/share/php/PHP/CodeCoverage/Report/Node/File.php:166
PHP 13. PHP_Token_Stream_CachingFactory::get() /usr/share/php/PHP/CodeCoverage/Util.php:254
PHP 14. PHP_Token_Stream->__construct() /usr/share/php/PHP/Token/Stream/CachingFactory.php:68
PHP 15. PHP_Token_Stream->scan() /usr/share/php/PHP/Token/Stream.php:147
我已经为cli和服务器php.ini修改了memory_limit 我也已经修改了suhosin的memory_limit。
当我在cli中打印phpinfo()时,我得到了这些值:
memory_limit => 2048M => 2048M
suhosin.memory_limit => 2G => 2G
有没有人知道可能导致此问题的原因?有人遇到过这样的情况吗?
答案 0 :(得分:0)
看起来它停止在200兆字节,所以你需要更多地查看你的配置以允许使用更多的内存,或者你在代码中的某个地方有一个包含循环。这种情况发生在我身上,包括两次枝条
答案 1 :(得分:0)
增加PHP内存限制(我使用1744M为PHP留下一些安全空间)。在做额外的记忆之前我遇到了同样的问题。我改变的下一件事是从代码覆盖中排除外部库(它们在作者的包中进行测试,因此我不需要知道他们在我的项目中的代码覆盖率)。这使我们的项目能够正确解析并获得正确的代码覆盖率分析。