Quelques tips pour phpunit #1

Publié le 14 février 2022 par Mathieu De Gracia
Couverture de l'article 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/unit
11
12local-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
9
10// vendor/bin/paratest --processes=24 --runner WrapperRunner
11Time: 00:42.975
Mathieu De Gracia avatar
Mathieu De Gracia
Des fois, mon chat code à ma place 🐱

A lire

Autres articles de la même catégorie