2015-06-06 2 views
5

Мои phpunit.xmlPhpUnit ... Killed Почему его убивают?

<phpunit 
    bootstrap="bootstrap.php" 
    backupGlobals="false" 
    colors="true" 
    convertErrorsToExceptions="true" 
    convertNoticesToExceptions="true" 
    convertWarningsToExceptions="true" 
    > 
    <testsuites> 
    <testsuite> 
     <directory suffix="Test.php">./tests</directory> 
    </testsuite> 
    </testsuites> 

    <logging> 
    <log type="coverage-html" target="coverage" lowUpperBound="75" highUpperBound="100" /> 
    </logging> 
</phpunit> 

Мои bootstrap.php:

<?php 

/** ---------------------------------------------------- **/ 
// Require the vendors autoload file. 
/** ---------------------------------------------------- **/ 
require_once 'vendor/autoload.php'; 

/** ---------------------------------------------------- **/ 
// We neeed WordPress Bootstrap files for its test. 
/** ---------------------------------------------------- **/ 
define('WP_TEST_DIR', parse_ini_file('test-config.ini')['test-location']); 

// Include the bootstrap file. 
require_once WP_TEST_DIR . 'includes/bootstrap.php'; 

// Include the Functions file 
require_once WP_TEST_DIR . 'includes/functions.php'; 

Когда я запускаю это с секцией регистрации раскомментирована, я получаю:

[email protected]:/vagrant/Freya/Routes$ phpunit 
Installing... 
Running as single site... To run multisite, use -c tests/phpunit/multisite.xml 
Not running ajax tests. To execute these, use --group ajax. 
Not running ms-files tests. To execute these, use --group ms-files. 
Not running external-http tests. To execute these, use --group external-http. 
PHPUnit 4.6.6 by Sebastian Bergmann and contributors. 

Configuration read from /vagrant/Freya/Routes/phpunit.xml 

...............Killed 

Когда я комментирую протоколирование я получаю:

[email protected]:/vagrant/Freya/Routes$ phpunit 
Installing... 
Running as single site... To run multisite, use -c tests/phpunit/multisite.xml 
Not running ajax tests. To execute these, use --group ajax. 
Not running ms-files tests. To execute these, use --group ms-files. 
Not running external-http tests. To execute these, use --group external-http. 
PHPUnit 4.6.6 by Sebastian Bergmann and contributors. 

Configuration read from /vagrant/Freya/Routes/phpunit.xml 

.................................. 

Time: 9.64 seconds, Memory: 45.50Mb 

OK (34 tests, 38 assertions) 

Почему он умирает без видимых ошибок? это проблема памяти? Если да, то почему бы не сказать это? В этот набор тестов входит набор тестов WordPress класса WP_UnitTestCase, чтобы разрешить мне установить поддельную установку Wordpress для некоторых тестов. Но, как вы можете видеть во второй раз, я запускал тесты с занесенным в журнал протоколом, я получал 45.50mb памяти , Это ничего.

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT 
display_errors = On 
display_startup_errors = Off 

Php версия 5.5.9

Что происходит? (Да папка покрытия существует)

Update 1

Оказывается, что dmesg показывает:

[942618.313174] Out of memory: Kill process 12987 (php) score 384 or sacrifice child 
[942618.315188] Killed process 12987 (php) total-vm:453360kB, anon-rss:192380kB, file-rss:12kB 
[942757.404416] php5-fpm invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0 
[942757.404421] php5-fpm cpuset=/ mems_allowed=0 
[942757.404424] CPU: 0 PID: 16427 Comm: php5-fpm Tainted: G   OX 3.13.0-37-generiC#64-Ubuntu 
[942757.404426] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006 
[942757.404428] 0000000000000000 ffff88000200d980 ffffffff8171ed09 ffff88001dfbb000 
[942757.404431] ffff88000200da08 ffffffff817195c4 0000000000000000 0000000000000000 
[942757.404432] 0000000000000000 0000000000000000 0000000000000000 0000000000000000 

мне нужно бы увеличить память PHP в этом случае?

+1

Проверьте 'dmesg', чтобы убедиться, что он действительно убит убийцей OOM. – VolenD

+0

Память, используемая убитым процессом, составляет 192 МБ в соответствии с протоколом dmesg. Я полагаю, что на виртуальной машине недостаточно свободной памяти (вы можете контролировать ее с помощью 'top', пока тесты выполняются). Таким образом, вы должны увеличить объем памяти виртуальной машины (увеличение памяти PHP не поможет). – VolenD

+0

Я увеличил память PHP до 550 МБ, и она решила проблему, у VM есть 2 концерта, где, когда php mem был в 120M – TheWebs

ответ

1

Я нашел лучший (только?) Способ диагностики фатальных ошибок в PHPUnit - это добавить ловушку ошибки завершения работы в бутстрап. PHPUnit ловушки ошибок сам по себе, чтобы помочь с отчетностью, но по какой-то причине это предотвращает сообщения о некоторых основных/фатальных типах вообще.

добавить это во всех моих проектах:

phpunit.xml:

< phpunit 
    bootstrap="bootstrap.php" 
... 

bootstrap.php:

// PHPUnit dies silently with FATAL ERRORS which makes it hard to debug the tests. 
register_shutdown_function('PHPUnit_shutdownFunction'); 
function PHPUnit_shutdownFunction() { 
    // http://www.php.net/manual/en/errorfunc.constants.php 
    $error = error_get_last(); 
    if (!is_null($error)){ 
     if($error['type'] & (E_ERROR + E_PARSE + E_CORE_ERROR + E_COMPILE_ERROR + E_USER_ERROR + E_RECOVERABLE_ERROR)){ 
      echo 'Test Bootstrap: Caught untrapped fatal error: '; 
      var_export($error); 
     } 
    } 
} 

И эти загадочные проблемы с быть делом прошлого.

Смежные вопросы