Dans pytest, qu'est-ce que l'utilisation de conftest.py fichiers?
J'ai récemment découvert pytest
. Il semble grand. Cependant, je ressens de la documentation pourrait être mieux.
J'essaie de comprendre ce que conftest.py
fichiers sont destinés à être utilisés pour.
Dans mon (actuellement petit) test de suite j'ai un conftest.py
fichier à la racine du projet. Je l'utilise pour définir les appareils que j'ai injecter dans mes tests.
J'ai deux questions:
- Est-ce la bonne utilisation de
conftest.py
? A-t-elle d'autres utilisations? - Puis-je avoir plus d'un
conftest.py
fichier? Quand aurais-je envie de faire? Des exemples seront appréciées.
Plus généralement, comment pouvez-vous définir le but et l'utilisation correcte de conftest.py
fichier(s) dans un py.test de la suite de tests?
- Vous m'avez eu à
It seems great. However, I feel the documentation could be better.
Vous devez vous connecter pour publier un commentaire.
Oui, il est. Les sanitaires sont un potentiel et l'utilisation commune de
conftest.py
. L'les accessoires qui vous permettront de définir sera partagé entre tous les tests dans votre suite de tests. Toutefois, la définition de luminaires à la racine
conftest.py
peut être inutile et il serait de ralentir le test si ces appareils ne sont pas utilisés par tous les tests.Oui, c'est fait.
Luminaires: Définir des accessoires pour les données statiques utilisés par les tests. Ces données peuvent être accessibles par tous les tests dans la suite, sauf indication contraire. Cela peut être des données ainsi que les aides de modules qui seront transmises à tous les essais.
De plugins externes de chargement:
conftest.py
est utilisé pour importer des plugins externes ou des modules. En définissant la variable globale suivante, pytest va charger le module et de le rendre disponible pour son test. Les Plugins sont généralement des fichiers définis dans votre projet ou à d'autres modules qui pourraient être nécessaires dans vos tests. Vous pouvez également charger un ensemble prédéfini de plugins comme expliqué ici.pytest_plugins = "someapp.someplugin"
Crochets: Vous pouvez spécifier des crochets comme le programme d'installation et les méthodes de démontage et beaucoup plus pour améliorer vos tests. Pour un ensemble de crochets disponibles, lire ici. Exemple:
Test du chemin de la racine: C'est un peu une fonctionnalité cachée. Par définition
conftest.py
dans la racine de votre chemin, vous aurezpytest
de la reconnaissance de vos modules de l'application, sans préciserPYTHONPATH
. Dans le fond, py.test modifie votresys.path
en incluant tous les submodules qui sont trouvés sur le chemin de la racine.Oui, vous pouvez et il est fortement recommandé si votre test de structure est un peu complexe.
conftest.py
les fichiers d'un répertoire portée. Par conséquent, la création ciblée des luminaires et des aides est de bonne pratique.Plusieurs cas peuvent s'adapter:
La création d'un ensemble d'outils ou de crochets pour un groupe particulier de tests.
root/mod/conftest.py
Chargement d'un ensemble de luminaires pour certains tests, mais pas pour les autres.
root/mod/conftest.py
root/mod2/conftest.py
root/mod2/test.py
Imprimé "quelques autres trucs".
Primordial crochets hérité de la racine
conftest.py
.root/mod/conftest.py
root/conftest.py
Par un test à l'intérieur de
root/mod
, seulement "je suis le mod" est imprimé.Vous pouvez en lire plus à propos de
conftest.py
ici.EDIT:
Vous pouvez utiliser
conftest.py
pour définir vos aides. Cependant, vous devez suivre la pratique courante. Les accompagnateurs peuvent être utilisés comme des appareils à moins depytest
. Par exemple, dans mes tests, j'ai une maquette redis helper qui, je l'injecter dans mes tests de cette façon.root/helper/redis/redis.py
root/tests/stuff/conftest.py
root/tests/stuff/test.py
Ce sera un module de test que vous pouvez importer librement dans vos tests. NOTE que vous pourriez potentiellement nom
redis.py
commeconftest.py
si votre moduleredis
contient plus de tests. Cependant, cette pratique est déconseillée en raison de l'ambiguïté.Si vous souhaitez utiliser
conftest.py
, vous pouvez simplement mettre de l'aide à la racine de votreconftest.py
et de l'injecter en cas de besoin.root/tests/conftest.py
root/tests/stuff/test.py
Une autre chose que vous pouvez faire est d'écrire un " plugin. Dans ce cas, votre aide peut être écrit n'importe où, mais il a besoin de définir un point d'entrée pour être installé dans votre possibles et d'autres frameworks de test. Voir cette.
Si vous ne voulez pas utiliser luminaires, vous pouvez bien entendu définir une simple aide et de l'utilisation juste de la plaine de vieux importation partout où elle est nécessaire.
root/tests/helper/redis.py
root/tests/stuff/test.py
Cependant, ici, vous pourriez avoir des problèmes avec le chemin d'accès depuis le module n'est pas dans un dossier enfant du test. Vous devriez être en mesure de surmonter cette (pas testé) par l'ajout d'une
__init__.py
pour votre aideroot/tests/helper/__init__.py
Ou simplement en ajoutant le module d'aide pour votre
PYTHONPATH
.conftest.py
des scripts (par exemple,pytest_runtest_setup()
,pytest_runtest_teardown()
).test_aaaaa.py
est en fait de la tentative d'exécution avant le montage de l'installation est réalisé dansconftest.py
. Des idées pour lesquelles cela peut se produire?Dans un sens large conftest.py est un répertoire plugin. Ici vous définissez spécifiques de l'annuaire des crochets et des accessoires. Dans mon cas, un disposent d'un répertoire racine contenant de projet de tests spécifiques répertoires. Certaines communes de la magie est stationnée en "root" conftest.py. Projet spécifique - dans leurs propres. Ne peut pas voir quelque chose de mauvais dans le stockage des accessoires dans le conftest.py à moins qu'ils ne sont pas largement utilisés (Dans ce cas, je préfère définir dans les fichiers de test directement)
Oui, un appareil est habituellement utilisé pour obtenir les données prêt pour les tests multiples.
Oui, un appareil est une fonction qui est exécutée par
pytest
avant, et parfoisaprès, l'effectif des fonctions de test. Le code dans le luminaire pouvez faire ce que vous
le souhaitez. Par exemple, un appareil peut être utilisé pour obtenir un ensemble de données pour les tests de travailler sur, ou un appareil peut également être utilisé pour obtenir un système dans un état connu avant l'exécution d'un test.
Tout d'abord, il est possible de mettre les appareils en test individuel fichiers. Cependant, à part les agencements entre plusieurs fichiers de test, vous devez utiliser un
conftest.py
fichier quelque part idéalement situé pour tous les tests. Les luminaires peuvent être partagées par toute épreuve. Ils peuvent être mis dans les différents fichiers de test si vous voulez de l'appareil pour être utilisé uniquement par des tests dans ce fichier.Deuxième, oui, vous pouvez avoir d'autres
conftest.py
fichiers dans des sous-répertoires de haut répertoire tests. Si vous le faites, luminaires définis dans ces bas-niveauconftest.py
fichiers seront disponibles pour des essais dans ce répertoire et sous-répertoires.Enfin, de mettre des accessoires dans la
conftest.py
fichier à la racine de test permettront de les rendre disponibles dans tous les fichiers de test.