Quelques tips pour phpunit #1

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

Comment du cache sur Eloquent a sauvé notre application
Retour d’expérience d'une application Laravel qui a subi de graves dysfonctionnements de base de données, découvrez comment la mise en cache des requêtes Eloquent l’a sauvée !

Mathieu De Gracia

Comment fonctionne l’url signed
Une URL signed fonctionne sans la moindre database, cookie, ou même cache... alors comment ?

Mathieu De Gracia

Les failles RCE dans Laravel
Une faille RCE consiste à injecter puis exécuter arbitrairement du code dans une application, voyons comment exploiter l’une d’entre elles dans un Laravel 9 !

Mathieu De Gracia