0

当我运行 PHPUnit 时,在我看来,当在单个测试类中运行许多测试时,它似乎存在内存泄漏。但我不知道这是一个错误还是预期的行为。

重现:

  • 我用愚蠢的 assertTrue(true) 创建了一个简单的 testHello()。
  • 我从 providerHello() 提供它。只需喂 3 个虚拟参数。
  • 使用$numberOfTests = 1;,消耗的内存为 5.75MB。
    • PHPUnit 输出 =Time: 0 seconds, Memory: 5.75Mb
  • 有了$numberOfTests = 10000;,我不希望内存增长这么多,只是新数组的大小。但是使用的内存是99.75MB,我觉得太多了。
    • PHPUnit 输出 =Time: 4 seconds, Memory: 99.75Mb
  • 我在提供程序中添加了一个脏 echo(),只是为了知道数组使脚本消耗了多少内存。
    • 1 次测试:Memory = 5294552(5.2MB)
    • 10.000 次测试:Memory = 15735352(15.7MB)

问题:

  • 为什么我会在路上丢失 84MB?(实际消耗了 99.75 - 阵列实际使用了 15.75)
  • 它在每次迭代时分配内存是否正常,可能是它的内部 setUp(),但在内部 tearDown() 中没有释放相同的数量?
  • 我做错什么了吗?

我的版本:

phpunit --versionPHPUnit 3.6.10 by Sebastian Bergmann..

这是代码:

<?php
class DemoTest extends \PHPUnit_Framework_TestCase
{
    /** @dataProvider providerHello */
    public function testHello( $a, $b, $c )
    {
        $this->assertTrue( true );
    }

    public function providerHello()
    {
        $numberOfTests = 10000;

        $data = array();

        for( $i = 0; $i < $numberOfTests; $i++ )
        {
            $data[] = array( 1, 2, 3 );
        }

        echo( "Memory = " . memory_get_peak_usage() . PHP_EOL );

        return $data;
    }

}
?>
4

1 回答 1

0

您需要在 phpunit.xml 文件中将 backupGlobals 和 backupStaticAttributes 设置为 false。如果你不使用配置文件,你也可以在命令行上这样做。

 --no-globals-backup
 --static-backup
于 2013-03-13T07:41:21.783 回答