Когда я запускаю PHPUnit, мне кажется, что у него была утечка памяти при запуске многих тестов внутри одного тестового класса. Но я не знаю, является ли это ошибкой или это ожидаемое поведение.Утечка памяти PHPUnit_Framework_TestCase с большим DataProvider
Для воспроизведения:
- Я создаю простой testHello() с глупой assertTrue (правда).
- Я подаю его от поставщикаHello(). Просто кормить 3 фиктивных параметра.
- С
$numberOfTests = 1;
, потребляемая память 5.75MB.- PHPUnit выход =
Time: 0 seconds, Memory: 5.75Mb
- PHPUnit выход =
- С
$numberOfTests = 10000;
, я не ожидал, что память расти так много, только размер нового массива. Но используемая память составляет 99,75 МБ, что я чувствую, что это слишком много.- PHPUnit выход =
Time: 4 seconds, Memory: 99.75Mb
- PHPUnit выход =
- Я добавил грязное эхо() в поставщике, только чтобы узнать, сколько памяти массив сделал скрипт для потребляет.
- С 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;
}
}
?>