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-randomlyactif 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.