Comment faire pour exécuter une méthode avant de tous les tests dans toutes les classes?
Je suis en train d'écrire le sélénium tests, avec un ensemble de classes, chaque classe contenant plusieurs tests. Chaque classe actuellement s'ouvre puis se ferme Firefox, ce qui a deux conséquences:
- super lent, l'ouverture de firefox prend plus de temps que l'exécution de l'essai dans une classe...
- se bloque, parce que, après firefox a été fermé, en essayant de l'ouvrir à nouveau très rapidement, de sélénium, les résultats dans une "Erreur 54'
Je pourrais résoudre l'erreur 54, probablement, par l'ajout d'un sommeil, mais il serait encore super lent.
Donc, ce que je voudrais faire est de réutiliser le même Firefox instances dans tous classes de test. Ce qui signifie que je dois exécuter une méthode avant de toutes les classes de test, et une autre méthode après toutes les classes de test. Donc, setup_class " et "teardown_class" ne sont pas suffisantes.
- Réglage de la
scope
pourmodule
n'est-ce pas assez? - J'ai besoin d'une fonction à exécuter une seule fois, à la fin, à l'arrêt du webbrowser. Je ne veux pas arrêter le webbrowser, après chaque cours/module. Je ne veux jamais être arrêté.
- Alors il est assez facile: utiliser le
atexit
et enregistrer la fonction de la fermeture de firefox pour être exécuté juste avant que l'interprète de sorties. - Merci. Je préfère un " py.test de la " façon de faire si possible.
- Vous pouvez le faire au niveau du module de démontage et d'installation et j'ai été en utilisant au niveau de la session teardowns et des configurations, cependant vous ne savez pas si elles sont encore disponibles.
Vous devez vous connecter pour publier un commentaire.
Vous pourriez vouloir utiliser une session d'étendue "autouse" fixture:
Cela permettra de courir au-devant de tous les tests. Le finaliseur sera appelé après le dernier test terminé.
À l'aide de session luminaire tel que suggéré par hpk42 est excellente solution pour de nombreux cas,
mais luminaire sera exécuté qu'après tous les tests sont collectées.
Voici deux autres solutions:
conftest crochets
Écrire un
pytest_configure
oupytest_sessionstart
crochet dans votreconftest.py
fichier:pytest plugin
Créer un pytest plugin avec
pytest_configure
etpytest_unconfigure
crochets.Activer votre plugin dans
conftest.py
:conftest.py
dans le même répertoire que vos autres tests que vous souhaitez exécuter avec la mêmepytest_sessionstart
etpytest_sessionfinish
routines.Partir de la version 2.10 il est le moyen le plus propre à la déchirure en bas de l'appareil ainsi que la définition de son champ d'application. Donc vous pouvez utiliser cette syntaxe:
La autouse paramètre:
De la documentation:
La "demande" de paramètre:
Notez que la "demande" paramètre n'est pas nécessaire pour que votre but est bien que vous pourriez vouloir utiliser à d'autres fins. De la documentation: