当我运行 PHPUnit 时,在我看来,当在单个测试类中运行许多测试时,它似乎存在内存泄漏。但我不知道这是一个错误还是预期的行为。
重现:
- 我用愚蠢的 assertTrue(true) 创建了一个简单的 testHello()。
- 我从 providerHello() 提供它。只需喂 3 个虚拟参数。
- 使用
$numberOfTests = 1;
,消耗的内存为 5.75MB。- PHPUnit 输出 =
Time: 0 seconds, Memory: 5.75Mb
- PHPUnit 输出 =
- 有了
$numberOfTests = 10000;
,我不希望内存增长这么多,只是新数组的大小。但是使用的内存是99.75MB,我觉得太多了。- PHPUnit 输出 =
Time: 4 seconds, Memory: 99.75Mb
- PHPUnit 输出 =
- 我在提供程序中添加了一个脏 echo(),只是为了知道数组使脚本消耗了多少内存。
- 1 次测试:
Memory = 5294552
(5.2MB) - 10.000 次测试:
Memory = 15735352
(15.7MB)
- 1 次测试:
问题:
- 为什么我会在路上丢失 84MB?(实际消耗了 99.75 - 阵列实际使用了 15.75)
- 它在每次迭代时分配内存是否正常,可能是它的内部 setUp(),但在内部 tearDown() 中没有释放相同的数量?
- 我做错什么了吗?
我的版本:
phpunit --version
给PHPUnit 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;
}
}
?>