Ich versuche, Code Testabdeckung für mein PHP-Projekt mit PHPUnit und phpdbg mit dem folgenden Befehl zu generieren:PHPUnit Abdeckung: Erlaubt Speichergröße von 536.870.912 Bytes erschöpft
phpdbg -dmemory_limit=512M -qrr ./bin/phpunit -c .phpunit.cover.xml
Das funktioniert völlig in Ordnung:
PHPUnit 6.2.4 by Sebastian Bergmann and contributors.
........ 8/8 (100%)
Time: 114 ms, Memory: 14.00MB
OK (8 tests, 13 assertions)
Generating code coverage report in HTML format ... done
jedoch wenn ich den exakt gleichen Befehl in einem docker Behälter:
docker run -it --name YM4UPltmiPMjObaVULwsIPIkPL2bGL0T -e USER=sasan -v "/home/sasan/Project/phpredmin:/phpredmin" -w "/phpredmin" --user "1000:www-data" php:7.0-apache phpdbg -dmemory_limit=512M -qrr ./bin/phpunit -c .phpunit.cover.xml
I erhalten folgende Fehlermeldung:
PHPUnit 6.2.4 by Sebastian Bergmann and contributors.
[PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 561514763337856 bytes) in /phpredmin/vendor/phpunit/phpunit/src/Util/GlobalState.php on line 166]
Ich verstehe nicht, warum PHPUnit 561514763337856 Byte Speicher zuweisen muss. Ich vermute, dass es in einer Schleife stecken bleibt, aber warum passiert das nicht außerhalb des Containers? Hier ist meine PHP-Version auf meinem Rechner:
PHP 7.0.22-0ubuntu0.17.04.1 (cli) (built: Aug 8 2017 22:03:30) (NTS)
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.22-0ubuntu0.17.04.1, Copyright (c) 1999-2017, by Zend Technologies
Und hier ist die .phpunit.cover.xml Datei:
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/6.3/phpunit.xsd"
backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
cacheTokens="false"
colors="false"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnError="true"
stopOnFailure="true"
stopOnIncomplete="false"
stopOnSkipped="false"
stopOnRisky="false"
timeoutForSmallTests="1"
timeoutForMediumTests="10"
timeoutForLargeTests="60"
verbose="false">
<testsuites>
<testsuite name="PhpRedmin PHP source">
<directory>src-test/</directory>
</testsuite>
</testsuites>
<logging>
<log type="coverage-html" target="cover/" lowUpperBound="35"
highLowerBound="70"/>
</logging>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">src-test/</directory>
<directory suffix=".php">src/</directory>
</whitelist>
</filter>
</phpunit>
- Edit1 -
ich, dass es gefunden hat etwas mit @runInSeparateProcess zu tun. Wenn ich den Test mit @runInSeparateProcess entferne, beginnt er zu arbeiten. Aber noch weiß ich nicht, was das Problem ist
- EDIT2 -
Auch fand ich heraus, dass, wenn ich nicht bereitgestellt mein Code-Verzeichnis in der alles Docker Behälter funktioniert
Welches Docker-Bild verwenden Sie? ist PHP als Dienst oder als Apache-Modul? Versuchen Sie, den PHP-Speicher in php.ini zu erhöhen. –
Auf welchem OS betreiben Sie das? –
@JoaquinJavi Wie Sie sehen können, ist es ** php: 7.0-Apache **: docker run -it --name YM4UPltmiPMjObaVULwsIPIkPL2bGL0T -e USER = sasan -v "/ home/sasan/Projekt/phpredmin:/phpredmin" -w "/phpredmin "--user" 1000: www-data "** php: 7.0-apache ** phpdbg -dmemory_limit = 512M -qrr ./bin/phpunit -c .phpunit.cover.xml Ich kann nicht meine erhöhen Speicherlimit zu 561514763337856 Bytes –