py.test: Temporärer Ordner für den Sitzungsumfang

8

Die tmpdir Fixture in py.test verwendet den function -Bereich und ist daher in einem Fixture mit einem breiteren Geltungsbereich wie session nicht verfügbar. Dies wäre jedoch in einigen Fällen hilfreich, beispielsweise beim Einrichten eines temporären PostgreSQL-Servers (der natürlich nicht für jeden Test neu erstellt werden sollte).

Gibt es eine saubere Möglichkeit, einen temporären Ordner für einen größeren Bereich zu bekommen, der nicht das Schreiben eigener Appliances und den Zugriff auf interne APIs von py.test erfordert?

    
ThiefMaster 27.08.2014, 10:49
quelle

4 Antworten

13

Leider gibt es derzeit keine Möglichkeit, dies gut 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 das manuell selbst machen. 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 Function-Scope-Fixture auf folgende Weise:

%Vor%

Dies erstellt ein temporäres Verzeichnis, das nach einem Testlauf bereinigt wird, jedoch für jeden Test, der es tatsächlich benötigt (durch Anfordern von dir ), eine Kopie erhält, 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 Objekte zurück in das Sessiondir kopieren. Dies ist jedoch keine sehr gute Idee, da es die Tests von der Ausführungsreihenfolge abhängig macht und auch Probleme bei der Verwendung von pytest-xdist verursachen würde.

    
flub 27.08.2014, 12:42
quelle
9

Seit pytest Version 2.8 und höher ist das sessionscoped tmpdir_factory Fixture verfügbar. Siehe das folgende Beispiel aus der Dokumentation .

%Vor%     
itsafire 27.06.2016 09:25
quelle
0

Ich füge einen Finalizer hinzu, wenn ich alle in der Sitzung erstellten temporären Ordner löschen möchte.

%Vor%

Die Ausgabe sollte wie folgt aussehen:

%Vor%     
asterio gonzalez 22.12.2017 19:25
quelle
-1

Hier ist ein anderer Ansatz. Es sieht so aus, als ob pytest temporäre Verzeichnisse nach Testläufen nicht entfernt. Das Folgende ist ein normales Funktionsgerät.

%Vor%

Und dauerhafte persistente Verzeichnisse über Module hinweg anstelle der gesamten pytest-Sitzung haben:

%Vor%

Bearbeiten: Hier ist eine andere Lösung, die keine globalen Variablen enthält. pytest 1.8.0 hat eine tmpdir_factory Fixture eingeführt, die wir verwenden können:

%Vor%     
Robpol86 08.08.2015 05:05
quelle

Tags und Links