具有Zend Framework内存问题的PhpUnit

问题描述 投票:2回答:5

我刚刚开始将PHP Unit与Zend Framework结合使用,并且我对memory_limit有问题。当前,内存限制设置为32M,并且在运行所有测试时出现致命错误:

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

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

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

谢谢,加百利

php zend-framework phpunit memory-management
5个回答
3
投票

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

phpunit --process-isolation

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

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

1
投票

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

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

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

600个测试,?断言,80 000行代码,约1200个不带库的文件


0
投票

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


0
投票

请谨慎执行phpunit --process-isolation,因为它会在单独的PHP进程中运行每个测试,因此测试会慢很多。相反,您可以只在php.ini中增加memory_limit


0
投票

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

  1. tearDown()处测试类的清理变量
  2. 标识在bootstrap()处加载的资源,类资源和插件资源。其中之一是内存增加的原因。查找代码并进行修复将使用率降低了10倍。
  3. 启用垃圾收集并在gc_collect_cycles()。
© www.soinside.com 2019 - 2024. All rights reserved.