2016-05-03 3 views
4

Ich habe eine Sitzung geladen und arbeitet Halterung in conftest.pyZugang autouse Befestigung ohne es zu dem Verfahren Argument hinzufügen zu müssen

@pytest.fixture(scope="session",autouse=True) 
def log(request): 
    testlog = LogUtil(testconf.LOG_NAME).get() 
    return testlog 

Dies wird scoped wie erwartet, wenn ein Testverfahren in mytest.py ist definiert als folgt:

def test_hello_world(self, log): 
     log.info("hello world test") 

gibt es eine Möglichkeit das Gerät zu verwenden, ohne (seit seiner autouse enabled) die extra „log“ Parameter zu testen Methoden hinzufügen?

def test_hello_world(self): 
     log.info("hello world test") #log is not found 

@pytest.mark.usefixtures("log") 
def test_hello_world2(self): 
     log.info("hello world test") #log is not found 

def test_hello_world3(self,log): 
     log.info("hello world test") #log object is accessible here 

Fehler - Nameerror: name 'log' ist nicht

definiert

Antwort

0

Sie verwenden in der Regel autouse Leuchten, wenn Sie sie für Setup/Teardown verwenden möchten nur.

Wenn Sie Zugriff auf das Objekt benötigen, das das Fixture zurückgibt, müssen Sie es wie in Ihrem ersten Beispiel als Argument angeben.

+0

Danke für die Antwort. Es wird mühsam, jedem Test Argumente hinzuzufügen, wenn die Anzahl der Tests zu wachsen beginnt. Gerade jetzt die Optionen zu sein scheinen: 1) Erstellen Sie eine globale Variable und aktualisieren Sie es das Gerät in conftest.py definiert mit 2) Erstellen Sie eine Basisklasse mit einer statischen Variablen (keine Halterung erforderlich) – tj23

+0

** I stimme völlig mit [tj23] überein (https://stackoverflow.com/users/1257065/tj23). ** Die Unfähigkeit, auf Fixtures zuzugreifen, die implizit entweder über 'autouse' oder 'usefixtures' deklariert wurden, macht solche Fixtures für die meisten Zwecke unbrauchbar mein Fall, _all_ Zwecke. Die übliche Alternative ist, dass ** (A) ** eine einzelne abstrakte Fixture definiert, die mehrere reale Fixtures erfordert, und dann ** (B) ** erfordern Tests die erstere und nicht die letztere. In meinem Fall verbieten die Scoping-Beschränkungen des Fixtures dies jedoch. _Urgh! _ –

+0

Ich stimme nicht zu - persönlich benutze ich oft auch Fixtures, um einfach etwas Setup/Teardown (z. B. Patching) zu haben und brauche keinen Zugriff darauf. Könnten Sie erläutern, warum Sie * mehrere * echte Fixtures und eine abstrakte Fixture benötigen? Was ist dein Anwendungsfall? Vielleicht sollten wir das aber zum [pytest tracker] (https://github.com/pytest-dev/pytest/issues) bringen. –

Verwandte Themen