2012-11-30 30 views
25

Dove e come py.test cerca i fari? Ho lo stesso codice in 2 file nella stessa cartella. Quando elimino conftest.py, cmdopt non può essere trovato in esecuzione test_conf.py (anche nella stessa cartella. Perché sonoftest.py non cercata?Come e dove py.test trova i fari

# 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 

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

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

La documentazione dire

http://pytest.org/latest/fixture.html#fixture-function

  1. pytest trova il test_ehlo causa del prefisso test_. La funzione test ha bisogno di un argomento di funzione chiamato smtp. Una funzione di abbinamento viene rilevata cercando una funzione contrassegnata da fixture denominata smtp.
  2. smtp() viene chiamato per creare un'istanza.
  3. test_ehlo() viene chiamato e non riesce nell'ultima riga della funzione di test.

risposta

26

py.test sarà importare file conftest.py e tutti Python che corrispondono al modello python_files, per impostazione predefinita test_*.py. Se si dispone di un dispositivo di prova, è necessario includere o importarlo da conftest.py o dai file di test che dipendono da esso:

from sonoftest import pytest_addoption, cmdopt 
16

Ecco l'ordine e dove py.test sembra per apparecchi (e test) (presi da here):

carichi py.test plug moduli all'avvio strumento nel seguente modo:

  1. caricando tutti i plugin built

  2. caricando tutti i plug-in registrati tramite i punti di ingresso di setuptools.

  3. pre-scansionando la riga di comando per l'opzione -p name e caricando il plug-in specificato prima dell'effettiva analisi della riga di comando.

  4. caricando tutti i file conftest.py come inferito dall'invocazione della riga di comando (file di test e tutte le relative directory padre). Si noti che i file conftest.py da sottodirectory non vengono caricati automaticamente all'avvio dello strumento .

  5. caricando in modo ricorsivo tutti i plugin specificate dalla variabile pytest_plugins in conftest.py file