Sfondo
Sono in esecuzione di un py.test con un fixture in una conftest file. Si può vedere il codice qui sotto (questo tutto funziona bene):Come saltare un pytest usando un dispositivo esterno?
example_test.py
import pytest
@pytest.fixture
def platform():
return "ios"
@pytest.mark.skipif("platform == 'ios'")
def test_ios(platform):
if platform != 'ios':
raise Exception('not ios')
def test_android_external(platform_external):
if platform_external != 'android':
raise Exception('not android')
conftest.py
import pytest
@pytest.fixture
def platform_external():
return "android"
Problema
Ora voglio essere in grado di saltare alcuni test che non si applicano alla mia prova corrente. Nel mio esempio eseguo test sia per iOS o Android (Questo è solo a scopo dimostrativo e potrebbe essere qualsiasi altra espressione).
Purtroppo non riesco a mettermi in contatto con (il mio esternamente definito apparecchio) platform_external
nella dichiarazione skipif
. Quando eseguo il codice seguente, ricevo la seguente eccezione: NameError: name 'platform_external' is not defined
. Non so se si tratta di un bug py.test come localmente funzionante.
add-on per example_test.py
@pytest.mark.skipif("platform_external == 'android'")
def test_android(platform_external):
"""This test will fail as 'platform_external' is not available in the decorator.
It is only available for the function parameter."""
if platform_external != 'android':
raise Exception('not android')
Così ho pensato che mi limiterò a creare il mio decoratrice, solo per vedere che non riceverà gli infissi come parametri:
from functools import wraps
def platform_custom_decorator(func):
@wraps(func)
def func_wrapper(*args, **kwargs):
return func(*args, **kwargs)
return func_wrapper
@platform_custom_decorator
def test_android_2(platform_external):
"""This test will also fail as 'platform_external' will not be given to the
decorator."""
if platform_external != 'android':
raise Exception('not android')
domanda
Come posso definire una correzione tura in un file conftest e utilizzarlo per (condizionatamente) saltare un test?
Grazie - Ho anche scelto il marcatore ieri come un lavoro in giro, ma non mi è piaciuto come non era elegante come la tua. (Ho usato 'pytest_runtest_setup' per il controllo dei marker). Ma dati i vincoli di py.tests questa sembra la soluzione più vicina alla mia domanda e aggiornerò la mia domanda per allinearla. –