Tests ausführen
Der sichtbarste Teil von Nette Tester ist der Test-Runner für die Kommandozeile. Er ist außerordentlich schnell und robust, weil er alle Tests automatisch als eigene Prozesse parallel in mehreren Threads ausführt. Er kann sich außerdem selbst im Watch-Modus ausführen.
Der Test-Runner wird von der Kommandozeile aus aufgerufen. Übergeben Sie als Parameter das Verzeichnis mit den Tests. Für das aktuelle Verzeichnis genügt ein Punkt:
vendor/bin/tester .
Der Test-Runner durchsucht das angegebene Verzeichnis und alle seine Unterverzeichnisse nach Tests, also nach Dateien, die auf
*.phpt oder *Test.php enden. Außerdem liest und wertet er ihre Annotationen aus, um zu bestimmen, welche Tests wie ausgeführt
werden.
Jede Testdatei läuft in ihrem eigenen isolierten PHP-Prozess, und der Runner führt mehrere davon gleichzeitig aus – die Einheit der Parallelität ist also die Datei. Der Code innerhalb einer Datei läuft deshalb nacheinander ab. Ein TestCase lebt in einer Datei, seine Methoden laufen also standardmäßig nacheinander in einem Prozess; kennzeichnen Sie ihn mit der Annotation @testCase, damit der Runner stattdessen jede Testmethode als eigenen parallelen Prozess ausführt.
Danach führt er die Tests aus. Während der Ausführung gibt er Zeichen im Terminal aus, die den Fortschritt anzeigen:
.– Test bestandens– Test wurde übersprungenF– Test fehlgeschlagen
Die Ausgabe kann so aussehen:
_____ ___ ___ _____ ___ ___
|_ _/ __)( __/_ _/ __)| _ )
|_| \___ /___) |_| \___ |_|_\ v2.6.1
PHP 8.5.2 (cli) | php | 8 threads
........s..........................
OK (35 tests, 1 skipped, 1.7 seconds)
Beim erneuten Lauf führt er zuerst die Tests aus, die im vorigen Lauf fehlgeschlagen sind, sodass Sie sofort wissen, ob Sie den Fehler behoben haben.
Der Exit-Code von Tester ist null, wenn kein Test fehlschlägt. Andernfalls ist er ungleich null.
Kommandozeilenparameter
Eine Übersicht der Kommandozeilenparameter erhalten Sie, indem Sie Tester ohne Parameter oder mit der Option -h
starten:
_____ ___ ___ _____ ___ ___
|_ _/ __)( __/_ _/ __)| _ )
|_| \___ /___) |_| \___ |_|_\ v2.6.1
Usage:
tester [options] [<test file> | <directory>]...
Options:
-p <path> Specify PHP interpreter to run (default: php).
-c <path> Use custom php.ini, ignore system configuration.
-C With -c, include system configuration as well.
-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 die PHP-Binary an, mit der die Tests ausgeführt werden. Standardmäßig ist das php.
tester -p /home/user/php-7.2.0-beta/php-cgi tests
-c <path>
Verwendet eine eigene Datei php.ini und ignoriert die Systemkonfiguration. Das ist nützlich, um Tests mit
bestimmten Einstellungen auszuführen. Mehr dazu unter Eigene php.ini.
-C
Zusammen mit -c verwendet, bezieht auch die Systemkonfiguration mit ein (ignoriert sie also nicht). Siehe den
Abschnitt Eigene php.ini.
-d <key=value>
Setzt den Wert einer PHP-Konfigurationsdirektive für die Tests. Dieser Parameter kann mehrfach verwendet werden.
tester -d max_execution_time=20
-s
Zeigt Informationen über übersprungene Tests an.
--stop-on-fail
Tester bricht das Testen beim ersten fehlgeschlagenen Test ab.
-j <num>
Gibt die Anzahl der parallelen Prozesse an, in denen die Tests laufen. Der Standardwert ist 8. Um die Tests nacheinander auszuführen, verwenden Sie den Wert 1.
-o <console|console-lines|tap|junit|log|none>
Legt das Ausgabeformat fest. Der Standard ist das Konsolenformat. Sie können den Namen der Datei angeben, in die die Ausgabe
geschrieben wird (z. B. -o junit:output.xml). Die Option -o lässt sich mehrfach wiederholen, um mehrere
Formate auf einmal zu erzeugen.
console: wie das Standardformat, nur wird in diesem Fall das ASCII-Logo nicht ausgegebenconsole-lines: ähnlich wie console, aber das Ergebnis jedes Tests steht mit zusätzlichen Informationen in einer eigenen Zeiletap: TAP-Format, für die maschinelle Verarbeitung geeignetjunit: JUnit-XML-Format, ebenfalls für die maschinelle Verarbeitung geeignetlog: Gibt den Verlauf des Testens aus. Enthält alle fehlgeschlagenen, übersprungenen und auch erfolgreichen Testsnone: es wird nichts ausgegeben
-w | --watch <path>
Nach Abschluss der Tests beendet sich Tester nicht, sondern läuft weiter und beobachtet die PHP-Dateien im angegebenen Verzeichnis. Ändert sich eine Datei, führt er die Tests erneut aus. Dieser Parameter lässt sich mehrfach verwenden, wenn Sie mehrere Verzeichnisse beobachten wollen.
Nützlich beim Refactoring einer Bibliothek oder beim Debuggen von Tests.
tester --watch src tests
-i | --info
Zeigt Informationen über die Laufzeitumgebung der 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. Innerhalb dieses Skripts steht die Variable
Tester\Runner\Runner $runner zur Verfügung. Nehmen wir eine Datei tests/runner-setup.php mit folgendem
Inhalt an:
$runner->outputHandlers[] = new MyOutputHandler;
Wir starten Tester mit:
tester --setup tests/runner-setup.php tests
--temp <path>
Setzt den Pfad zum Verzeichnis für die temporären Dateien von Tester. Den Standardwert liefert
sys_get_temp_dir(). Sie werden benachrichtigt, wenn der Standardwert nicht gültig ist.
Wenn Sie sich nicht sicher sind, welches Verzeichnis verwendet wird, starten Sie Tester mit dem Parameter
--info.
--colors 1|0
Standardmäßig erkennt Tester, ob das Terminal Farben unterstützt, und färbt seine Ausgabe entsprechend ein. Diese Option
überschreibt die automatische Erkennung. Sie können die Färbung global über die Umgebungsvariable
NETTE_TESTER_COLORS einstellen.
--coverage <path>
Tester erzeugt einen Bericht darüber, wie viel des Quellcodes von Tests abgedeckt ist. Diese Option erfordert die installierte PHP-Extension Xdebug oder PCOV oder die schnellere SAPI PHPDBG. Die Endung der Zieldatei bestimmt ihr Format: HTML oder Clover XML.
tester tests --coverage coverage.html # HTML-Bericht tester tests --coverage coverage.xml # Clover-XML-Bericht
Die Reihenfolge bei der Auswahl der Coverage-Engine ist wie folgt:
- PCOV
- PHPDBG
- Xdebug
Bei der Verwendung von PHPDBG können umfangreiche Tests wegen erschöpftem Speicher fehlschlagen. Das Sammeln der
Informationen zur Code Coverage ist speicherintensiv. In diesem Fall kann ein Aufruf von
Tester\CodeCoverage\Collector::flush() in Ihrem Test helfen. Er schreibt die gesammelten Daten auf die Festplatte und
gibt Speicher frei. Der Aufruf wirkt nur mit der Engine PHPDBG; mit PCOV, Xdebug oder wenn keine Datensammlung läuft, tut er
nichts.
Sehen Sie sich einen `Beispiel-HTML-Bericht mit der Code Coverage an.
--coverage-src <path>
Wird zusammen mit der Option --coverage verwendet. <path> ist der Pfad zum Quellcode, für den
der Bericht erzeugt wird. Kann mehrfach verwendet werden.
Eigene php.ini
Sie können für Ihre Tests eine eigene Datei php.ini verwenden. Wenn Sie bestimmte Extensions oder besondere
INI-Einstellungen brauchen, empfehlen wir, eine eigene Datei php.ini anzulegen und mit Ihren Tests auszuliefern.
Starten Sie Tester dann mit der Option -c, zum Beispiel tester -c tests/php.ini tests. Die INI-Datei
kann so aussehen:
[PHP]
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
memory_limit=512M
Bei der Verwendung von -c ignoriert Tester die Systemkonfiguration (startet PHP mit dem Flag
-n). Wenn Sie die Systemkonfiguration ebenfalls einbeziehen wollen, ergänzen Sie die Option -C:
tester -c tests/php.ini -C tests. Auch bei der Kombination von -c und -C werden unter UNIX
die weiteren INI-Dateien aus /etc/php/conf.d/*.ini nicht geladen. Das ist ein Verhalten von PHP und nicht spezifisch
für Tester.
Vor Version 2.6 startete Tester PHP ohne -c mit dem Flag -n, also ohne php.ini; die
Option -C unterdrückte das. Ab Version 2.6 wird die System-php.ini standardmäßig geladen. Das Verhalten bei der
Verwendung von -c bleibt unverändert.