Où py.test cherche-t-il des luminaires? J'ai le même code dans 2 fichiers dans le même dossier. Lorsque je supprime conftest.py, il est impossible de trouver cmdopt avec Test_conf.py (également dans le même dossier. Pourquoi le fichier sonoftest.py n'est-il pas recherché?
# content of test_sample.py
def test_answer(cmdopt):
if cmdopt == "type1":
print ("first")
Elif cmdopt == "type2":
print ("second")
assert 0 # to see what was printed
import pytest
def pytest_addoption(parser):
parser.addoption("--cmdopt", action="store", default="type1",
help="my option: type1 or type2")
@pytest.fixture
def cmdopt(request):
return request.config.getoption("--cmdopt")
import pytest
def pytest_addoption(parser):
parser.addoption("--cmdopt", action="store", default="type1",
help="my option: type1 or type2")
@pytest.fixture
def cmdopt(request):
return request.config.getoption("--cmdopt")
Les docs disent
http://pytest.org/latest/fixture.html#fixture-function
- pytest trouve le test_ehlo à cause du préfixe test_. La fonction de test nécessite un argument de fonction nommé smtp. Un appareil assorti La fonction est découverte en recherchant une fonction marquée nommée smtp.
- smtp () est appelé pour créer une instance.
- test_ehlo () est appelé et échoue dans la dernière ligne de la fonction de test.
py.test importera conftest.py
et tous les fichiers Python correspondant au modèle python_files
, par défaut test_*.py
. Si vous avez un appareil de test, vous devez l'inclure ou l'importer à partir de conftest.py
ou des fichiers de test qui en dépendent:
from sonoftest import pytest_addoption, cmdopt
Voici la commande et où py.test cherche des fixtures (et des tests) (pris de ici ):
py.test charge les modules de plug-in au démarrage de l'outil de la manière suivante:
en chargeant tous les plugins internes
en chargeant tous les plugins enregistrés via les points d’entrée setuptools.
en analysant à l'avance la ligne de commande pour l'option
-p name
et en chargeant le plug-in spécifié avant l'analyse en ligne de commande.en chargeant tous les fichiers
conftest.py
comme induit par l'appel de la ligne de commande (fichiers de test et tous ses répertoires parents). Notez que Les fichiersconftest.py
des sous-répertoires ne sont pas chargés par défaut à démarrage de l'outil.en chargeant récursivement tous les plugins spécifiés par la variable pytest_plugins dans les fichiers
conftest.py
J'avais le même problème et j'ai passé beaucoup de temps à trouver une solution simple. Cet exemple est destiné aux autres personnes confrontées à la même situation que moi.
import pytest
pytest_plugins = [
"some_package.sonoftest"
]
def pytest_addoption(parser):
parser.addoption("--cmdopt", action="store", default="type1",
help="my option: type1 or type2")
@pytest.fixture
def cmdopt(request):
return request.config.getoption("--cmdopt")
import pytest
@pytest.fixture
def sono_cmdopt(request):
return request.config.getoption("--cmdopt")
def test_answer1(cmdopt):
if cmdopt == "type1":
print ("first")
Elif cmdopt == "type2":
print ("second")
assert 0 # to see what was printed
def test_answer2(sono_cmdopt):
if sono_cmdopt == "type1":
print ("first")
Elif sono_cmdopt == "type2":
print ("second")
assert 0 # to see what was printed
Vous pouvez trouver un exemple similaire ici: https://github.com/pytest-dev/pytest/issues/3039#issuecomment-464489204 And other ici https://stackoverflow.com/a/54736376/6655459
Description de la documentation officielle de pytest: https://docs.pytest.org/fr/latest/reference.html?highlight=pytest_plugins#pytest-plugins
Notez que les répertoires respectifs mentionnés dans
some_package.test_sample"
besoin d'avoir des fichiers__init__.py
pour que les plugins soient chargés parpytest