Si vous voulez éviter testAllLevels
d'être collectées comme un test, vous devez créer un fichier appelé pytest.ini
et le mettre à l'intérieur dossier main
ou tests
.
Le contenu de pytest.ini
devrait être quelque chose comme ceci:
[pytest]
python_functions=test_
Notez que cela signifie aussi que toutes vos fonctions de test doivent avoir un préfixe de test_
à partir de maintenant. Le comportement par défaut de pytest
consiste à collecter des fonctions avec le préfixe test
(pas test_
).
Pour répondre à la question à propos de why functions are run on import?
, essayez l'expérience suivante. Dans votre test_foo.py
, ajoutez une ligne pour obtenir une référence interne au module test_foo.py
lui-même.
from main.foo import testAllLevels
reference_to_current_module = sys.modules[__name__]
Ensuite, dans le même module, créez un test qui ressemble à ceci:
def test_01():
print(dir(reference_to_current_module))
reference_to_current_module.testAllLevels()
La sortie du dir()
vous montrera que testAllLevels
est devenu une fonction légitime appartenant à test_foo.py
après l'importation L'instruction est exécutée. Cela a été vérifié en appelant la fonction via la référence à test_foo.py
. Je pense qu'il a été collecté par pytest parce que c'est une fonction "appartenant à" un module de test et son nom de fonction a un préfixe test
.
Essayez de décorer la fonction avec '@ pytest.mark.skip' – Mangohero1
Est-ce vraiment appelé' testAllLevels'? Selon [les docs] (https://docs.pytest.org/en/latest/goodpractices.html # conventions-for-python-test-discovery), pytest ne doit collecter que des fonctions dont le nom commence par 'test_'. – BrenBarn
@ mangoHero1 lorsque je marque la fonction dans 'foo.py', elle ignore tous les tests dans' test_foo.py'. – mfedoten