PhpUnit与Zend Framework内存问题

时间:2010-11-18 14:51:02

标签: php zend-framework phpunit memory-management

我刚刚开始在Zend Framework中使用PHP Unit,我对memory_limit有疑问。目前,内存限制设置为32M,当运行所有测试时,我收到致命错误:

允许的内存大小为33554432字节。

目前,我有:7个文件,125个测试,332个断言。 我只测试控制器。 我使用@dataProvider进行一些测试,使用1到5组数据(起初我是从文件中读取它们,我试图将数据直接放在测试文件中,但它仍然达到内存限制)

所以我的问题是基于phpunit的测试通常的内存限制是多少? 我应该在哪里改进内存测试?任何建议都会很棒。

谢谢, 加布里埃尔

5 个答案:

答案 0 :(得分:3)

我的测试套件超过300个内存限制为128M的情况后,我遇到了类似的问题 帮助我的是在孤立的进程中运行测试用例。您可以从命令行执行此操作:

phpunit --process-isolation

或将其添加到您的phpunit.xml配置:

<phpunit bootstrap="./application/bootstrap.php"
    processIsolation="true">

答案 1 :(得分:1)

另一个解决方案是在每次测试后关闭备份和恢复全局状态。 PHPUnit默认执行此操作,这将我们的测试套件的内存使用量从1000 MB减少到90 MB ...(是的,我们有一个很大的应用程序)

phpunit配置文件中有一个名为backupGlobals的设置。

https://phpunit.readthedocs.io/en/7.4/configuration.html

600次测试,?断言,80 000行代码,大约1200个没有库的文件

答案 2 :(得分:0)

我使用默认内存设置(128M)运行PHP 5.3.3,并且在Zend Framework上从未出现过单元测试应用程序的问题。

答案 3 :(得分:0)

对于旧的应用程序,我在每次测试后都遇到了内存增加的问题,导致内存使用量超过1G。 为了解决这个问题,我尝试了很多不同的东西。 最有效的是:

  1. 在tearDown()中清理测试类的变量。
  2. 识别bootstrap(),类资源和插件资源中加载的资源。其中一个是内存增加的原因。查找代码并修复它会减少10倍的使用量。
  3. 启用垃圾收集并在tearDown()调用gc_collect_cycles()。

答案 4 :(得分:0)

小心做phpunit --process-isolation因为它在一个单独的PHP进程中运行每个测试,所以测试会慢得多。相反,你可以在php.ini

中增加memory_limit