Booster l’exécution de votre suite de tests PHPUnit

par | Fév 26, 2021 | Web & Mobile

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

Photo de couv’ par: https://unsplash.com/@hiro7jp