Comment puis-je répéter chaque test plusieurs fois de py.essai?
Je veux exécuter chaque py.élément d'essai, un nombre arbitraire de fois, de manière séquentielle.
Je ne vois pas de standard py.test de mécanisme pour le faire.
J'ai essayé de le faire dans le pytest_collection_modifyitems()
crochet. J'ai modifié la liste des éléments transmis, pour spécifier chaque article plus d'une fois. La première exécution d'un élément de test fonctionne comme prévu, mais qui semble causer des problèmes pour mon code.
De plus, je préfère avoir un test unique élément de l'objet pour chaque exécution, comme je l'ai utiliser l'id (point) comme un élément clé dans divers rapports du code. Malheureusement, je ne trouve pas de py.le code de test pour dupliquer un élément de test, copy.copy()
ne fonctionne pas, et copy.deepcopy()
obtient une exception.
Quelqu'un peut-il proposer une stratégie pour l'exécution d'un test à plusieurs reprises?
Vous devez vous connecter pour publier un commentaire.
Pour l'exécution de chaque test, un certain nombre de fois, nous allons par programme paramétrer chaque test, car les tests sont générés.
Tout d'abord, nous allons ajouter l'analyseur option (inclure les éléments suivants dans l'un de vos conftest.py's):
Maintenant, nous ajoutons un "pytest_generate_tests" crochet. C'est là que la magie se produit.
En cours d'exécution sans les répéter drapeau:
En cours d'exécution avec le flag repeat:
Pour en savoir plus:
La pytest module pytest-répéter existe pour cela, et je vous recommande d'utiliser des modules, si possible, plutôt que de la re-mise en œuvre de leur fonctionnalité vous-même.
À l'utiliser, ajouter simplement
pytest-repeat
à votrerequirements.txt
oupip install pytest-repeat
, puis exécuter vos tests avec--count n
.warnings.warn("Repeating unittest class tests not supported")
github.com/pytest-dev/pytest-repeat/blob/...Une stratégie possible est de paramétrer le test en question, mais pas explicitement à l'aide du paramètre.
Par exemple:
Le test ci-dessus devrait fonctionner cinq fois.
Vérifier le paramétrage de la documentation: https://pytest.org/latest/parametrize.html
Basé sur Frank T de la suggestion, j'ai trouvé une solution très simple dans le pytest_generate_tests() légende:
Maintenant l'exécution de "py.test, qui compte 5" les causes de chaque test pour être exécuté cinq fois dans la session de test.
Et il ne nécessite aucune modification à l'un de nos tests existants.
Merci Frank T!
Basé sur ce que j'ai vu ici, et étant donné que je fais déjà de filtrage de tests dans
pytest_collection_modifyitems
, ma méthode de choix est la suivante. Dansconftest.py