Selon Wikipedia et divers articles il est préférable de diviser les tests en tests unitaires (exécuter en premier) et tests d'intégration (exécuter en second), où les tests unitaires sont généralement très rapides et doit être exécuté avec chaque génération dans un environnement CI, mais les tests d'intégration prennent plus de temps à exécuter et doivent être plus quotidiens.
Existe-t-il un moyen de les diviser en pytest? La plupart des projets ne semblent pas avoir plusieurs dossiers de test, donc y a-t-il un moyen de m'assurer que je n'exécute que Unit, Integration ou les deux selon la situation (CI vs builds quotidiens)? Lors du calcul de la couverture du test, je suppose que je devrai exécuter les deux.
Est-ce que j'y vais de la bonne façon en essayant de diviser les tests en ces catégories? Y a-t-il un bon exemple quelque part d'un projet qui a fait cela?
Oui, vous pouvez marquer les tests avec le pytest.mark
décorateur.
Exemple:
def unit_test_1():
# assert here
def unit_test_2():
# assert here
@pytest.mark.integtest
def integration_test():
# assert here
Maintenant, à partir de la ligne de commande, vous pouvez exécuter pytest -m "not integtest"
pour les tests unitaires uniquement, pytest -m integtest
uniquement pour le test d'intégration et plain pytest
pour tous.
(Vous pouvez également décorer vos tests unitaires avec pytest.mark.unit
si vous voulez, mais je trouve ça un peu fastidieux/verbeux)
Voir documentation pour plus d'informations.
Vous pouvez également physiquement séparer les tests unitaires et d'intégration dans des répertoires spécifiques. Voici un exemple de structure de fichier de A. Shaw's article Premiers pas avec les tests en Python :
Avec une approche structurelle:
@pytest.mark
project/
répertoire:Avec unittest
de la bibliothèque standard:
> python -m unittest discover -s tests/integration
Avec nose
:
> nose tests/integration
Avec pytest
:
> pytest tests/integration
De nombreux lanceurs de tests ont un mécanisme de découverte de test automatique qui peut trouver des tests dans des sous-répertoires, par ex.
> cd <root_dir>
> pytest project/