Travailler en mode agile c’est COOL ! Faire de l’intégration continue c’est TOP ! Chaque nouvelle “feature” est bien testée et nous exécutons notre suite de tests à chaque “Merge request” afin d’éviter les régressions.
Quelques releases plus tard… Le projet grossit, le nombre de tests explose, le temps d’exécution de la suite de tests aussi! Des idées obscures commencent à émerger afin d’économiser du temps: Et si nous éliminons …. STOP ! Mieux vaut avoir des exécutions de tests lents, n’est-ce pas ?
Exécution des tests en simultané
Les services de CI, comme CircleCI ou Travis CI, offrent la possibilité d’exécuter des Jobs en simultané. Nous pourrions, alors, répartir nos tests par type (Unitaires, tests d’intégration, E2E) dans des jobs séparés et les lancer simultanément.
Mais il existe une solution encore plus simple et qui ne nécessite pas, ou peu de changements pour économiser de nombreuses minutes sur le temps d’exécution de nos suites de tests phpUnit.
Le package ParaTest
l’objectif de ce package est d’ajouter la fonctionnalité d’exécution des tests en parallèle à phpUnit, et sans aucune configuration supplémentaire, s’il vous plaît!
Installation
composer require --dev brianium/paratest
Utilisation
# ./tests désigne le dossier contenant les tests
vendor/bin/paratest -p8 ./tests
l’argument -p8 indique que nombre de processus simultanés. La règle est CPU cores * 2
Exemple
Vous pouvez trouver une démo sur github au lien suivant: https://github.com/tarekdj/paratest-demo
Ci-dessous le comparatif entre PHPUnit et ParaTest sur CircleCI
PHPUnit vs ParaTest
Vous pouvez voir qu’avec l’installation d’un package supplémentaire et sans aucune modification, nous avons un gain considérable sur le temps d’exécution.
Évidemment, il est possible d’apporter plus d’optimisations en ajustant les paramètres de ParaTest (avec prudence).
Ressources
- https://github.com/paratestphp/paratest
- https://packagist.org/packages/brianium/paratest
- https://github.com/tarekdj/paratest-demo
Photo de couv’ par: https://unsplash.com/@hiro7jp