15

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

-d memory_limit=768M我已经通过使用开关将 memory_limit 设置提高到 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。

4

3 回答 3

15

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

于 2010-11-23T01:00:00.210 回答
2

Do you have xdebug profiling enabled, if so try disabling it. I've experienced this problem before, and it came down to extensions in php (specifically xdebug profiling and/or Inclued heirarchy viewer)

于 2010-10-14T14:25:16.110 回答
0

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

阅读Speed up PHPUnit Code Coverage Analysis以获得一些比较 XDebug、PHPDebug 和 PCOV 的良好基准。它还包含有关如何在 PHPUnit 8 上启用 PCOV 的说明。

阅读设置 PHP PCOV 以将 PHPUnit 代码覆盖速度提高 5 倍,以获取有关在 PHPUnit7 及以下版本上设置 PCOV 的说明。

于 2020-09-08T21:04:30.910 回答