Tests ausführen
Der sichtbarste Teil von Nette Tester ist der Test-Runner für die Kommandozeile. Er ist außergewöhnlich schnell und robust, da er alle Tests automatisch als separate Prozesse startet, und das parallel in mehreren Threads. Er kann sich auch selbst im sogenannten Watch-Modus starten.
Der Test-Runner wird von der Kommandozeile aus aufgerufen. Als Parameter geben wir das Verzeichnis mit den Tests an. Für das aktuelle Verzeichnis genügt ein Punkt:
vendor/bin/tester .
Der Test-Runner durchsucht das angegebene Verzeichnis und alle Unterverzeichnisse und sucht nach Tests, das sind Dateien
*.phpt
und *Test.php
. Gleichzeitig liest und wertet er deren Annotationen aus, um zu wissen, welche davon und wie sie ausgeführt
werden sollen.
Danach führt er die Tests aus. Während der Ausführung der Tests gibt er die Ergebnisse kontinuierlich als Zeichen auf dem Terminal aus:
.
– Test bestandens
– Test übersprungen (skipped)F
– Test fehlgeschlagen (failed)
Die Ausgabe kann beispielsweise so aussehen:
_____ ___ ___ _____ ___ ___
|_ _/ __)( __/_ _/ __)| _ )
|_| \___ /___) |_| \___ |_|_\ v2.5.2
Note: No php.ini is used.
PHP 8.3.2 (cli) | php -n | 8 threads
........s..........................
OK (35 tests, 1 skipped, 1.7 seconds)
Bei wiederholter Ausführung führt er zuerst die Tests aus, die beim vorherigen Durchlauf fehlgeschlagen sind, sodass Sie sofort erfahren, ob es Ihnen gelungen ist, den Fehler zu beheben.
Wenn kein Test fehlschlägt, ist der Rückgabecode von Tester Null. Andernfalls ist der Rückgabecode ungleich Null.
Tester startet PHP-Prozesse ohne php.ini
. Details im Abschnitt Eigene php.ini.
Kommandozeilenparameter
Eine Übersicht aller Kommandozeilenoptionen erhalten Sie, indem Sie Tester ohne Parameter oder mit dem Parameter
-h
starten:
_____ ___ ___ _____ ___ ___ |_ _/ __)( __/_ _/ __)| _ ) |_| \___ /___) |_| \___ |_|_\ v2.5.2 Usage: tester [options] [<test file> | <directory>]... Options: -p <path> Specify PHP interpreter to run (default: php). -c <path> Look for php.ini file (or look in directory) <path>. -C Use system-wide php.ini. -d <key=value>... Define INI entry 'key' with value 'value'. -s Show information about skipped tests. --stop-on-fail Stop execution upon the first failure. -j <num> Run <num> jobs in parallel (default: 8). -o <console|console-lines|tap|junit|log|none> (e.g. -o junit:output.xml) Specify one or more output formats with optional file name. -w | --watch <path> Watch directory. -i | --info Show tests environment info and exit. --setup <path> Script for runner setup. --temp <path> Path to temporary directory. Default by sys_get_temp_dir(). --colors [1|0] Enable or disable colors. --coverage <path> Generate code coverage report to file. --coverage-src <path> Path to source code. -h | --help This help.
-p <path>
Gibt den PHP-Interpreter an, der zum Ausführen der Tests verwendet wird. Standardmäßig ist dies php
.
tester -p /home/user/php-7.2.0-beta/php-cgi tests
-c <path>
Gibt an, welche php.ini
beim Ausführen der Tests verwendet wird. Standardmäßig wird keine php.ini verwendet.
Mehr im Abschnitt Eigene php.ini.
-C
Verwendet die systemweite php.ini
. Unter UNIX auch alle relevanten INI-Dateien
/etc/php/{sapi}/conf.d/*.ini
. Mehr im Abschnitt Eigene php.ini.
-d <key=value>
Setzt den Wert einer PHP-Konfigurationsdirektive für die Tests. Der Parameter kann mehrfach verwendet werden.
tester -d max_execution_time=20
-s
Zeigt Informationen über übersprungene Tests an.
--stop-on-fail
Tester stoppt die Testausführung beim ersten fehlgeschlagenen Test.
-j <num>
Gibt an, wie viele parallele Prozesse mit Tests gestartet werden. Der Standardwert ist 8. Wenn wir möchten, dass alle Tests seriell ausgeführt werden, verwenden wir den Wert 1.
-o <console|console-lines|tap|junit|log|none>
Legt das Ausgabeformat fest. Standard ist das Konsolenformat. Sie können einen Dateinamen angeben, in den die Ausgabe
geschrieben wird (z. B. -o junit:output.xml
). Die Option -o
kann mehrfach wiederholt werden, um mehrere
Formate gleichzeitig zu generieren.
console
: Identisch mit dem Standardformat, aber in diesem Fall wird das ASCII-Logo nicht angezeigt.console-lines
: Ähnlich wie console, aber das Ergebnis jedes Tests wird in einer separaten Zeile mit weiteren Informationen angezeigt.tap
: TAP-Format, geeignet für maschinelle Verarbeitung.junit
: JUnit-XML-Format, ebenfalls für maschinelle Verarbeitung geeignet.log
: Ausgaben des Testverlaufs. Alle fehlgeschlagenen, übersprungenen und auch erfolgreichen Tests.none
: Es wird nichts ausgegeben.
-w | --watch <path>
Nach Abschluss der Tests beendet sich Tester nicht, sondern bleibt laufen und überwacht PHP-Dateien im angegebenen Verzeichnis. Bei einer Änderung führt er die Tests erneut aus. Der Parameter kann mehrfach verwendet werden, wenn wir mehrere Verzeichnisse überwachen möchten.
Nützlich beim Refactoring einer Bibliothek oder beim Debuggen von Tests.
tester --watch src tests
-i | --info
Zeigt Informationen zur Laufzeitumgebung für die Tests an. Zum Beispiel:
tester -p /usr/bin/php7.1 -c tests/php.ini --info PHP binary: /usr/bin/php7.1 PHP version: 7.1.7-1+0~20170711133844.5+jessie~1.gbp5284f4 (cli) Code coverage engines: (not available) Loaded php.ini files: /var/www/dev/demo/tests/php.ini PHP temporary directory: /tmp Loaded extensions: Core, ctype, date, dom, ereg, fileinfo, filter, hash, ...
--setup <path>
Tester lädt beim Start das angegebene PHP-Skript. Darin steht die Variable Tester\Runner\Runner $runner
zur
Verfügung. Angenommen, die Datei tests/runner-setup.php
hat folgenden Inhalt:
$runner->outputHandlers[] = new MyOutputHandler;
Wir starten Tester:
tester --setup tests/runner-setup.php tests
--temp <path>
Legt den Pfad zum Verzeichnis für temporäre Dateien von Tester fest. Der Standardwert wird von
sys_get_temp_dir()
zurückgegeben. Wenn der Standardwert ungültig ist, werden Sie benachrichtigt.
Wenn wir uns nicht sicher sind, welches Verzeichnis verwendet wird, starten wir Tester mit dem Parameter
--info
.
--colors 1|0
Standardmäßig erkennt Tester ein farbiges Terminal und färbt seine Ausgabe ein. Diese Option überschreibt die
Autodetektion. Global können wir die Farbgebung über die Systemumgebungsvariable NETTE_TESTER_COLORS
einstellen.
--coverage <path>
Tester generiert einen Bericht mit einer Übersicht darüber, wie viel Quellcode die Tests abdecken. Diese Option erfordert die installierte PHP-Erweiterung Xdebug oder PCOV oder PHP 7 mit PHPDBG SAPI, das schneller ist. Die Dateierweiterung der Zieldatei bestimmt ihr Format. Entweder HTML oder Clover XML.
tester tests --coverage coverage.html # HTML-Bericht tester tests --coverage coverage.xml # Clover XML-Bericht
Die Priorität bei der Auswahl des Mechanismus ist wie folgt:
- PCOV
- PHPDBG
- Xdebug
Bei Verwendung von PHPDBG können bei umfangreichen Tests Fehler aufgrund von Speichermangel auftreten. Die Sammlung von
Informationen über abgedeckten Code ist speicherintensiv. In diesem Fall hilft der Aufruf von
Tester\CodeCoverage\Collector::flush()
innerhalb des Tests. Er schreibt die gesammelten Daten auf die Festplatte und
gibt Speicher frei. Wenn keine Datensammlung stattfindet oder Xdebug verwendet wird, hat der Aufruf keine Auswirkung.
Beispiel für einen HTML-Bericht mit Codeabdeckung.
--coverage-src <path>
Wird gleichzeitig mit der Option --coverage
verwendet. <path>
ist der Pfad zu den Quellcodes,
für die der Bericht generiert wird. Kann wiederholt verwendet werden.
Eigene php.ini
Tester startet PHP-Prozesse mit dem Parameter -n
, was bedeutet, dass keine php.ini
geladen wird.
Unter UNIX auch nicht die aus /etc/php/conf.d/*.ini
. Dies gewährleistet eine einheitliche Umgebung für die
Ausführung der Tests, deaktiviert aber auch alle PHP-Erweiterungen, die normalerweise vom System-PHP geladen werden.
Wenn Sie das Laden der systemweiten php.ini-Dateien beibehalten möchten, verwenden Sie den Parameter -C
.
Wenn Sie Erweiterungen oder spezielle INI-Einstellungen für Tests benötigen, empfehlen wir die Erstellung einer eigenen
php.ini
-Datei, die mit den Tests verteilt wird. Tester wird dann mit dem Parameter -c
gestartet, zum
Beispiel tester -c tests/php.ini tests
, wobei die INI-Datei wie folgt aussehen kann:
[PHP]
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
memory_limit=512M
Das Starten von Tester unter UNIX mit einer systemweiten php.ini
, zum Beispiel
tester -c /etc/php/cli/php.ini
, lädt nicht die anderen INIs aus /etc/php/conf.d/*.ini
. Dies ist eine
Eigenschaft von PHP, nicht von Tester.