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

问题描述 投票:0回答:4

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

我通过使用

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

操作系统: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。

php zend-framework jenkins phpunit hudson
4个回答
15
投票

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


2
投票

您是否启用了 xdebug 分析,如果是,请尝试禁用它。我以前遇到过这个问题,它归结为 php 中的扩展(特别是 xdebug 分析和/或包含的层次结构查看器)


0
投票

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

阅读 加速 PHPUnit 代码覆盖率分析,了解一些比较 XDebug、PHPDebug 和 PCOV 的良好基准。它还包含有关如何在 PHPUnit 8 上启用 PCOV 的说明。

阅读 设置 PHP PCOV 使 PHPUnit 代码覆盖率提高 5 倍 了解有关在 PHPUnit7 及更低版本上设置 PCOV 的说明。


0
投票

我在 PHPUnit v10 中使用任何代码覆盖率格式时遇到 OOM 问题,并通过将“processIsolation”选项设置为 true 解决了该问题。也许这也对某人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.