2010-11-18 109 views
2

我刚开始使用PHP单元与Zend框架,我有memory_limit问题。目前,内存限制设置为32M,并且在运行所有测试时出现致命错误:Zend框架内存问题PhpUnit

允许内存大小为33554432个字节耗尽。

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

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

感谢, 加布里埃尔

+0

什么是PHPUnit版本和ZS版本? – 2010-11-18 14:59:56

+0

PHP版本5.2.8,PHPUnit 3.4.2,Zend Framework版本1.10.8 – 2010-11-18 15:04:59

回答

3

我的测试套件超过300个128M内存限制的情况后,我遇到了类似的问题。
什么帮助我在孤立的进程中运行测试用例。您可以在命令行做到这一点:

phpunit --process-isolation 

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

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

太好了,解决了我的问题。现在单元测试运行速度有点慢,但这是我可以忍受的一个问题。谢谢。 – 2010-11-19 11:02:31

+0

@Vika我试过你的建议,并收到'RuntimeException:Zend Optimizer需要Zend Engine API版本220060519. 安装的Zend Engine API版本220090626更新。 请访问Zend Technologies http://www.zend.com/获取更高版本的Zend Optimizer。 – zavg 2013-05-24 12:23:31

0

我运行PHP 5.3.3默认的内存设置(128M)和从未有过的问题与Zend框架的单元测试的应用程序。

+0

您的应用程序有多大?那里有多少测试? – 2010-11-18 14:59:38

+0

尤其是,代码库大约20MB,现在我有大约300个测试用例。 – netcoder 2010-11-18 15:06:58

1

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

600测试,?断言,80000行代码,大约1200个文件,没有库

0

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

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

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