Leider gibt es derzeit keine Möglichkeit, dies schön zu machen. In Zukunft wird py.test einen neuen "Any" Scope oder etwas ähnliches einführen, aber das ist die Zukunft.
Jetzt müssen Sie dies manuell selbst tun. Wie Sie jedoch bemerken, verlieren Sie einige nette Features: Symlinks in/tmp zum letzten Test, automatische Bereinigung nach ein paar Testläufen, sinnvoll benannte Verzeichnisse usw. Wenn das Verzeichnis nicht zu teuer ist, kombiniere ich normalerweise ein Session- und Funktionsbereichs-Fixture auf folgende Weise:
@pytest.fixture(scope='session')
def sessiondir(request):
dir = py.path.local(tempfile.mkdtemp())
request.addfinalizer(lambda: dir.remove(rec=1))
# Any extra setup here
return dir
@pytest.fixture
def dir(sessiondir, tmpdir):
sessiondir.copy(tmpdir)
return tmpdir
Dadurch entsteht ein temporäres Verzeichnis, das nach einem Testlauf gereinigt wird jedoch für jeden Test, die es tatsächlich braucht (von dir
anfordernden) erhält eine Kopie, die mit der tmpdir Semantik gespeichert wird.
Wenn Tests tatsächlich den Status über dieses Verzeichnis freigeben müssen, müsste der Finalizer von dir
die Daten zurück in den Sessiondir kopieren. Dies ist jedoch keine sehr gute Idee, da es die Tests abhängig von der Ausführungsreihenfolge macht und auch Probleme mit pytest-xdist verursachen würde.
Würden wir in Schwierigkeiten laufen, wenn wir die eingebaute in tmpdir zu einem neuen Plugin-Namen einfach kopiert und Umfang es, wie wir wollen? – ajwood
Wahrscheinlich, IIRC der Name der Tmpdir hängt von der Funktionsumfang und das könnte zu Problemen führen. Aber ich habe es nicht überprüft, versuch es, wenn du willst! – flub
Seit 2.8 ist dies nicht mehr der Fall. Siehe https://stackoverflow.com/a/38050261/384617. –