Aller au contenu

pytest

À quoi il sert

pytest exécute les tests d'un projet Python et en rapporte le résultat par un code de sortie, exploitable en CI. Il réduit un test à une fonction avec un assert, gère la préparation et le nettoyage par des fixtures, et s'étend par des greffons : pytest-cov pour la couverture, pytest-randomly pour l'ordre aléatoire, pytest-xdist pour le parallélisme, pytest-rerunfailures pour les relances.

Quand le choisir

  • Pour tester tout projet Python, du test unitaire au test d'intégration.
  • Quand on veut un format de rapport (JUnit XML) compris par les plateformes de CI.
  • Pour détecter les dépendances à l'ordre des tests, avec pytest-randomly.

Alternatives

unittest (dans la bibliothèque standard, plus verbeux), nose2 (peu actif). En pratique, pytest est le standard de fait.

Points d'attention

  • En CI, désactivez le cache (-p no:cacheprovider) si l'espace de travail est en lecture seule.
  • Gardez pytest-randomly actif et faites afficher la graine : elle permet de rejouer un ordre qui a fait échouer un test.
  • La couverture mesure les lignes exécutées, pas la qualité des tests : ne la transformez pas en objectif chiffré.

Par où commencer

Le cours CI/CD : les principes, leçon 3, où pytest sert de socle aux tests unitaires et d'intégration du pipeline.