Comment et où est-py.essai de trouver luminaires

Où et comment py.test rechercher des luminaires? J'ai le même code dans les 2 fichiers dans le même dossier. Quand je supprime conftest.py, cmdopt ne peut pas être trouvé en cours d'exécution test_conf.py (également dans le même dossier. Pourquoi sonoftest.py pas fouillé?

# 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

Contenu de conftest.py

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")

Contenu de sonoftest.py

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

  1. pytest trouve le test_ehlo à cause du préfixe test_. La fonction de test a besoin d'un argument de fonction nommé smtp. Un correspondant de luminaire la fonction est découverte en recherchant une fonction marquée par un luminaire nommée SMTP.
  2. smtp() est appelé pour créer une instance.
  3. test_ehlo() est appelée et échoue dans la dernière ligne de la fonction de test.
26
demandé sur codeape 2012-11-30 13:05:52

2 réponses

Py.test importera conftest.py et tous les fichiers Python qui correspondent 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
26
répondu ecatmur 2012-11-30 10:17:24

Voici l'ordre et où py.test recherche les appareils (et les tests) (extrait de ici):

Py.testez les modules du plugin au démarrage de l'outil de la manière suivante:

  1. En chargeant tous les plugins intégrés

  2. En chargeant tous les plugins enregistrés via les points d'entrée setuptools.

  3. En pré-scannant la ligne de commande pour l'option -p name et en chargeant le plugin spécifié avant l'analyse de ligne de commande réelle.

  4. En chargeant tous les fichiers conftest.py comme inféré par l'appel de ligne de commande (fichiers de test et tous ses répertoires parents). Notez que conftest.py les fichiers des sous-répertoires ne sont pas outil de démarrage.

  5. En chargeant récursivement tous les plugins spécifiés par la variable pytest_plugins dans conftest.py files

17
répondu Alex Okrushko 2015-05-11 12:35:59