2016-06-06 8 views
0

Gibt es eine Möglichkeit, eine .py am Anfang neben __init__.py ausführen?Führen Sie eine Datei vor py.test Sitzung startet, ohne __init__

Mein Problem ist, ich muss den aktuellen Datenbankstatus speichern, bevor das Parsen der Dateien Dinge ändert. Weil ich temporäre Testvariablen habe, die sich ändern, aber wenn ich den Zustand vor dem Analysieren speichern könnte, wäre das behoben, da ich es am Ende der Sitzung wiederherstellen kann.

Ich muss ein .py nicht nur vor der eigentlichen Testsitzung ausführen, sondern bevor die anderen Dateien analysiert werden.

Beispiel:

console> py.test tests/test_example.py
- brauchen sie hier
collecting 0 items
tests/test_example.py
==== test session starts ====
conftest.py läuft hier

Sie sagen könnte zu laufen, dass ein __init__.py eine Lösung sein würde, aber wenn Es gibt eine __init__.py Im Testverzeichnis läuft pytest alles als ein Modul. (Anstelle von py._path.pyimport von läuft, läuft es von __init__.py) Dies bricht alle meine Tests und Importe während meiner gesamten Tests/Verzeichnis

Vielleicht kann ich meine eigene Kiste py._path.pyimport, dies scheint nicht nur die sicherste/korrekt zu sein Weg. Oder ist es möglich, eine __init__.py anzurufen und noch von py._path.pyimport nach zu laufen?

+0

Warum nicht ein Skript schreiben, das den Zustand speichert, läuft Ihr Test, und dann wieder den Zustand? –

+0

Nun, andere Leute werden diese Tests ausführen müssen, ich denke, ich könnte die Skriptdatei in den gleichen Dateibereich stellen und sie einfach mit einigen Eingaben von der Konsole aus ausführen, um anzupassen, wie der Test ausgeführt werden soll. Immer noch Es wäre nützlich, wenn ich einige hybrid von '__init__' und 'py._path.pyimport' Funktion – Comradsky

+0

noch in Python wäre gut – Comradsky

Antwort

2

Sie könnten pytests plugin hooks mit einem conftest.py dazu verwenden.

Ich bin nicht sicher, welcher Haken für Ihren Fall am besten wäre. Wahrscheinlich pytest_configure.

Zum Beispiel mit diesem in einem conftest.py:

def pytest_configure(): 
    print("Hello World") 

Sie erhalten:

$ py.test 
Hello World! 
=================== test session starts ==================== 
platform linux -- Python 3.5.1, pytest-2.9.2, py-1.4.31, pluggy-0.3.1 
[..] 

collecting 120 items 
+0

würden nicht die Hooks nach dem Start der Testsitzung ausgeführt werden? Ich brauche es während oder vor der Initialisierung zu laufen – Comradsky

+0

Hängt davon ab, welche Initialisierung Sie meinen, aber pytest basiert stark auf Haken, z. Selbst die Testsitzung selbst ist nur ein Satz (interner) Hooks. –

+0

wie in der Frage angegeben? Initialisierungsbedeutung bei __init__.py ganz zu Beginn des Parsens. Lange bevor die Testsitzung beginnt.Hooks können den Test konfigurieren, können aber nur ausgeführt werden, wenn die Testsitzung startet, richtig? – Comradsky