【问题标题】:PhpUnit with Zend Framework memory problem带有 Zend Framework 内存问题的 PhpUnit
【发布时间】:2011-05-12 02:09:06
【问题描述】:

我刚刚开始在 Zend Framework 中使用 PHP 单元,但我遇到了 memory_limit 的问题。目前,内存限制设置为 32M,运行所有测试时出现致命错误:

已用完允许的 33554432 字节的内存大小。

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

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

谢谢, 加布里埃尔

【问题讨论】:

  • 什么是PHPUnit版本和ZS版本?
  • PHP 版本 5.2.8、PHPUnit 3.4.2、Zend 框架版本 1.10.8

标签: php zend-framework phpunit memory-management


【解决方案1】:

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

phpunit --process-isolation

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

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

【讨论】:

  • 太好了,解决了我的问题。现在单元测试运行有点慢,但这是我可以忍受的问题。谢谢。
  • @Vika 我尝试了你的建议并收到了RuntimeException: Zend Optimizer requires Zend Engine API version 220060519. The Zend Engine API version 220090626 which is installed, is newer. Contact Zend Technologies at http://www.zend.com/ for a later version of Zend Optimizer.
【解决方案2】:

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

在phpunit配置文件中有一个叫backupGlobals的设置。

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

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

【讨论】:

【解决方案3】:

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

【讨论】:

  • 特别是,代码库大约20MB,我现在有大约300个测试用例。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-10-10
      • 2010-12-31
      • 1970-01-01
      • 2012-11-08
      • 2010-11-22
      • 2011-08-18
      • 1970-01-01
      • 2017-06-27
      • 2012-11-18
      相关资源
      最近更新 更多