Exécution des tests
La partie la plus visible de Nette Tester est le lanceur de tests depuis la ligne de commande. Il est extraordinairement rapide et robuste, car il lance automatiquement tous les tests comme des processus distincts et ce, en parallèle dans plusieurs threads. Il sait aussi se lancer lui-même en mode ‘watch’.
Nous appelons le lanceur de tests depuis la ligne de commande. Comme paramètre, nous indiquons le répertoire contenant les tests. Pour le répertoire actuel, il suffit d'entrer un point :
vendor/bin/tester .
Le lanceur de tests parcourt le répertoire spécifié et tous les sous-répertoires et recherche les tests, qui sont les
fichiers *.phpt
et *Test.php
. En même temps, il lit et évalue leurs annotations, pour savoir lesquels et comment les lancer.
Ensuite, il lance les tests. Pendant l'exécution des tests, il affiche en continu les résultats sur le terminal sous forme de caractères :
.
– le test a réussis
– le test a été sauté (skipped)F
– le test a échoué (failed)
La sortie peut ressembler par exemple à ceci :
_____ ___ ___ _____ ___ ___
|_ _/ __)( __/_ _/ __)| _ )
|_| \___ /___) |_| \___ |_|_\ 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)
Lors d'une exécution répétée, il exécute d'abord les tests qui ont échoué lors de l'exécution précédente, de sorte que vous savez immédiatement si vous avez réussi à corriger l'erreur.
Si aucun test n'échoue, le code de retour de Tester est zéro. Sinon, le code de retour est non nul.
Tester lance les processus PHP sans php.ini
. Plus de détails dans la section php.ini personnalisé.
Paramètres de la ligne de commande
Nous obtenons un aperçu de toutes les options de la ligne de commande en lançant Tester sans paramètres, ou avec le
paramètre -h
:
_____ ___ ___ _____ ___ ___ |_ _/ __)( __/_ _/ __)| _ ) |_| \___ /___) |_| \___ |_|_\ 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>
Spécifie le binaire PHP qui sera utilisé pour exécuter les tests. Par défaut, c'est php
.
tester -p /home/user/php-7.2.0-beta/php-cgi tests
-c <path>
Spécifie quel php.ini
sera utilisé lors de l'exécution des tests. Par défaut, aucun php.ini n'est utilisé.
Plus d'informations dans la section php.ini personnalisé.
-C
Le php.ini
système sera utilisé. Sous UNIX, également tous les fichiers INI pertinents
/etc/php/{sapi}/conf.d/*.ini
. Plus d'informations dans la section php.ini
personnalisé.
-d <key=value>
Définit la valeur de la directive de configuration PHP pour les tests. Le paramètre peut être utilisé plusieurs fois.
tester -d max_execution_time=20
-s
Affiche des informations sur les tests sautés.
--stop-on-fail
Tester arrête les tests au premier test échouant.
-j <num>
Spécifie combien de processus parallèles avec des tests seront lancés. La valeur par défaut est 8. Si nous voulons que tous les tests s'exécutent en série, nous utilisons la valeur 1.
-o <console|console-lines|tap|junit|log|none>
Définit le format de sortie. Le format par défaut est pour la console. Vous pouvez spécifier un nom de fichier dans lequel
la sortie sera écrite (par exemple -o junit:output.xml
). L'option -o
peut être répétée plusieurs
fois pour générer plusieurs formats à la fois.
console
: identique au format par défaut, mais dans ce cas, le logo ASCII n'est pas affichéconsole-lines
: similaire à console, mais le résultat de chaque test est indiqué sur une ligne distincte avec des informations supplémentairestap
: format TAP adapté au traitement machinejunit
: format XML JUnit, également adapté au traitement machinelog
: Sorties du déroulement des tests. Tous les tests échoués, sautés et aussi réussisnone
: rien n'est affiché
-w | --watch <path>
Après la fin des tests, Tester ne se termine pas, mais reste en cours d'exécution et surveille les fichiers PHP dans le répertoire spécifié. En cas de changement, il relance les tests. Le paramètre peut être utilisé plusieurs fois si nous voulons surveiller plusieurs répertoires.
Utile lors du refactoring d'une bibliothèque ou du débogage de tests.
tester --watch src tests
-i | --info
Affiche des informations sur l'environnement d'exécution des tests. Par exemple :
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 charge au démarrage le script PHP spécifié. Dans celui-ci, la variable Tester\Runner\Runner $runner
est
disponible. Supposons un fichier tests/runner-setup.php
avec le contenu :
$runner->outputHandlers[] = new MyOutputHandler;
Nous lançons Tester :
tester --setup tests/runner-setup.php tests
--temp <path>
Définit le chemin vers le répertoire pour les fichiers temporaires de Tester. La valeur par défaut est renvoyée par
sys_get_temp_dir()
. Si la valeur par défaut n'est pas valide, vous serez averti.
Si nous ne sommes pas sûrs du répertoire utilisé, nous lançons Tester avec le paramètre --info
.
--colors 1|0
Par défaut, Tester détecte un terminal couleur et colore sa sortie. Cette option supplante l'auto-détection. Globalement,
nous pouvons définir la coloration avec la variable d'environnement système NETTE_TESTER_COLORS
.
--coverage <path>
Tester génère un rapport avec un aperçu de la quantité de code source couverte par les tests. Cette option nécessite l'extension PHP Xdebug installée, ou PCOV, ou PHP 7 avec PHPDBG SAPI, qui est plus rapide. L'extension du fichier cible détermine son format. Soit HTML, soit Clover XML.
tester tests --coverage coverage.html # Rapport HTML tester tests --coverage coverage.xml # Rapport Clover XML
La priorité de sélection du mécanisme est la suivante :
- PCOV
- PHPDBG
- Xdebug
Lors de l'utilisation de PHPDBG, nous pouvons rencontrer un échec de test sur des tests volumineux en raison de l'épuisement
de la mémoire. La collecte d'informations sur le code couvert est gourmande en mémoire. Dans ce cas, l'appel
Tester\CodeCoverage\Collector::flush()
à l'intérieur du test nous aide. Il écrit les données collectées sur le
disque et libère la mémoire. Si la collecte de données n'a pas lieu, ou si Xdebug est utilisé, l'appel n'a aucun effet.
Exemple de rapport HTML avec la couverture de code.
--coverage-src <path>
À utiliser en même temps que l'option --coverage
. <path>
est le chemin vers les codes sources
pour lesquels le rapport est généré. Peut être utilisé de manière répétée.
php.ini personnalisé
Tester lance les processus PHP avec le paramètre -n
, ce qui signifie qu'aucun php.ini
n'est chargé.
Sous UNIX, même ceux de /etc/php/conf.d/*.ini
. Cela garantit un environnement identique pour l'exécution des tests,
mais désactive également toutes les extensions PHP normalement chargées par le PHP système.
Si vous souhaitez conserver le chargement des fichiers php.ini système, utilisez le paramètre -C
.
Si vous avez besoin de certaines extensions ou de paramètres INI spéciaux pour les tests, nous vous recommandons de créer
votre propre fichier php.ini
, qui sera distribué avec les tests. Tester est ensuite lancé avec le paramètre
-c
, par exemple tester -c tests/php.ini tests
, où le fichier INI peut ressembler à ceci :
[PHP]
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
memory_limit=512M
Lancer Tester sous UNIX avec le php.ini
système, par exemple tester -c /etc/php/cli/php.ini
, ne
chargera pas les autres INI de /etc/php/conf.d/*.ini
. C'est une caractéristique de PHP, pas de Tester.