py.test: Übergebe einen Parameter an eine Fixture Funktion
Ich benutze py.test, um einige DLL-Code in einer Python-Klasse MyTester zu testen. Zu Validierungszwecken muss ich einige Testdaten während der Tests protokollieren und anschließend weiter verarbeiten. Da ich viele test _... -Dateien habe, möchte ich die Tester-Objekterstellung (Instanz von MyTester) für die meisten meiner Tests wiederverwenden.
Da das Tester-Objekt die Referenzen zu den Variablen und Funktionen der DLL enthält, muss für jede der Testdateien eine Liste der Variablen der DLL an das Tester-Objekt übergeben werden (die zu protokollierenden Variablen sind für einen Test_ identisch). . Datei). Der Inhalt der Liste wird verwendet, um die angegebenen Daten zu protokollieren.
Meine Idee ist, es irgendwie so zu machen:
import pytest
class MyTester():
def __init__(self, arg = ["var0", "var1"]):
self.arg = arg
# self.use_arg_to_init_logging_part()
def dothis(self):
print "this"
def dothat(self):
print "that"
# located in conftest.py (because other test will reuse it)
@pytest.fixture()
def tester(request):
""" create tester object """
# how to use the list below for arg?
_tester = MyTester()
return _tester
# located in test_...py
# @pytest.mark.usefixtures("tester")
class TestIt():
# def __init__(self):
# self.args_for_tester = ["var1", "var2"]
# # how to pass this list to the tester fixture?
def test_tc1(self, tester):
tester.dothis()
assert 0 # for demo purpose
def test_tc2(self, tester):
tester.dothat()
assert 0 # for demo purpose
Ist es möglich, dies zu erreichen, oder gibt es einen eleganteren Weg?
Normalerweise könnte ich es für jede Testmethode mit einer Art Setup-Funktion (xUnit-style) machen. Aber ich möchte eine Art Wiederverwendung erlangen. Weiß jemand, ob dies mit Vorrichtungen überhaupt möglich ist?
Ich weiß, dass ich so etwas machen kann: (aus den Dokumenten)
@pytest.fixture(scope="module", params=["merlinux.eu", "mail.python.org"])
Dafür muss ich die Parametrierung direkt im Testmodul vornehmen.Ist es möglich, über das Testmodul auf das Attribut params des Geräts zuzugreifen?