Tester son code est tout bonnement essentiel pour s'assurer de la bonne qualité de nos projets, mais parfois utiliser PHPUnit peut s’avérer laborieux et rapidement chronophage.
Voici quelques tips pour améliorer vos performances et votre confort d’utilisation de PHPUnit.
Utiliser un makefile
Nous passons nos journées à lancer les sempiternelles mêmes commandes, d'autant que PHPUnit a rapidement tendance à devenir très verbeux en arguments et en options.
Vous gagnerez du temps en créant un fichier Makefile à la racine de votre projet contenant vos commandes les plus habituelles.
1PHPUNIT = vendor/bin/phpunit 2 3test: 4 $(PHPUNIT) 5 6feature-test: 7 $(PHPUNIT) tests/feature 8 9unit-test:10 $(PHPUNIT) tests/unit1112local-test:13 $(PHPUNIT) --exclude=external-dependency
Vous pourrez ainsi exécuter vos commandes bien plus rapidement : make feature-test
Relancer uniquement les tests en erreur
Il est possible de configurer PHPUnit afin de relancer uniquement les tests qui ont précédemment échoué, cela sera beaucoup plus rapide que de relancer l'intégralité de votre test case lors de vos séances de debug.
Pour cela il vous suffit d'ajouter la configuration cacheResult
à votre phpunit.xml
:
1<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"2 xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"3 cacheResult="true"
Vous pourrez ensuite relancer un à un les tests qui ont précédemment échoué avec la commande :
1vendor/bin/phpunit --order-by=defects --stop-on-failure
Une simple commande que vous pourrez ajouter dans votre Makefile !
Lancer les tests en parallèles
Lancer l'intégralité de vos tests peut prendre plusieurs longues minutes dès lors que votre projet devient conséquent, le package paratestphp/paratest vous offre la possibilité d'exécuter vos tests en parallèles à travers plusieurs processus en simultané !
Une fois le package installé, il vous suffit de lancer le bin à l'aide de la commande suivante :
1vendor/bin/paratest --processes=4
Le package paratest prendra en compte votre
phpunit.xml
habituel.
Vous pouvez également ajouter l’option --runner WrapperRunner
afin de mutualiser le bootstraping de vos tests au sein d'un même processus et gagner en performances.
Attention, l’asynchrone n’est pas une solution magique, lancer plusieurs processus en parallèle peut tout bonnement s’avérer contre-productif. Il est parfois nécessaire de tester plusieurs configurations pour trouver celle qui correspondra le mieux à votre situation !
1// vendor/bin/phpunit 2Time: 00:31.998 3 4// vendor/bin/paratest --processes=6 --runner WrapperRunner 5Time: 00:15.274 6 7// vendor/bin/paratest --processes=12 --runner WrapperRunner 8Time: 00:19.885 910// vendor/bin/paratest --processes=24 --runner WrapperRunner11Time: 00:42.975
A lire
Autres articles de la même catégorie
Simplifiez l'utilisation de Reverb avec Livewire
Utiliser le serveur de broadcast Reverb sans écrire de JavaScript grâce à la magie de Livewire
Mathieu De Gracia
Les bases du CQRS en Laravel
Découvrir les bases de l'architecture CQRS en Laravel.
Mathieu De Gracia
Le pattern Pipeline
Laravel dispose d'un puissant service de Pipeline méconnu de la plupart des développeurs, explorons ensemble les possibilités que propose ce pattern !
Mathieu De Gracia