Testen, ob der code ausgeführt wird in einer py.test-session
Ich würde gerne eine Verbindung zu einer anderen Datenbank, wenn mein code ist unter py.test. Gibt es eine Funktion zum aufrufen oder eine Umgebungsvariable, die ich testen kann, der wird mir sagen, wenn ich unter einem py.test-session? Was ist der beste Weg, dies zu behandeln?
- Benötigen Sie weitere details. py.test, Datenbank? Diese sind etwas generisch.
- py.testen ist das Test-system (pytest.org). Meine DB hier in Mongo, aber es könnte einer DB, dünkt mich.
- Ahh.. Sorry, ich konnte nicht mehr hilfreich. Froh, dass Sie die Antwort gefunden.
- Diese Frage wird immer negative Stimmen, weil es als "schlechte Praxis". Für mich habe ich eine Menge Experimente, wo ich will einfach nur, um zu testen, ob Sie ohne Fehler ausgeführt. Laufen die Dinge bis zur Fertigstellung dauert viel zu lange, also habe ich die übergabe um eine "test_mode" - argument zu jedem experiment, das ich testen wollen, die nur bedeutet, verschiedene Dinge zu verkürzen, das experiment, während noch ausgeführt wird durch den code. Dieser Ansatz ist sehr repetitiv, und die Art von schlampig, würde ich am Liebsten einfach Fragen, das system, wenn ich in einen test. Hat jemand eine schönere Lösung als eine akzeptierte unten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer einfacheren Lösung kam ich zu:
Pytest Läufer wird immer laden Sie die
pytest
- Modul, so dass es insys.modules
.Natürlich, dass diese Lösung nur funktioniert, wenn der code, den Sie versuchen zu testen, nicht nutzen
pytest
selbst.nose
sowiesys.modules.keys()
.sys.modules
ist, dass es importiert wurde, in eine oder andere Weise, direkt im code oder durch ein anderes importieren (es könnte einer der Bibliotheken, die Sie verwenden, die nicht importieren). Und wie gesagt: diese Lösung funktioniert nur, wenn der code, den Sie versuchen zu testen, nicht nutzenpytest
selbst".pytest
laufen meine testsEiner Lösung kam von RTFM, obwohl Sie nicht in einem offensichtlichen Platz. Auch im Handbuch hatte einen Fehler im code unten korrigiert.
Gibt es auch eine andere Möglichkeit in der Betriebsanleitung dokumentiert:
https://docs.pytest.org/en/latest/example/simple.html#pytest-current-test-environment-variable
Pytest wird die folgende Umgebungsvariable festlegen
PYTEST_CURRENT_TEST
.Überprüfung der Existenz von Sprach-variable sollte zuverlässig ermöglichen zu erkennen, ob code ausgeführt wird, aus innerhalb dem Dach der pytest.
Arbeiten mit
pytest==4.3.1
den oben genannten Methoden gescheitert, so ging ich einfach old-school und geprüft mit:Dies könnte geschehen, indem das setzen einer environment-variable in das testen von code. Angenommen, Sie haben ein Projekt
In
test_app.py
Sie können hinzufügenUnd dann können Sie überprüfen Sie das innere
app.py
:Während der hack erklärte in der anderen Antwort (http://pytest.org/latest/example/simple.html#detect-if-running-from-within-a-pytest-run) funktioniert in der Tat, Sie könnte wahrscheinlich design der code so würden Sie nicht brauchen, um dies zu tun.
Wenn Sie den code, um die Datenbank zu verbinden, um so ein argument irgendwie über eine Verbindung oder etwas anderes, dann kann man einfach Spritzen, ein anderes argument, wenn Sie die tests dann, wenn die Anwendung treibt. Ihr code wird am Ende mit weniger globalen Staat und mehr modulare und wiederverwendbare. Also für mich klingt es wie ein Beispiel, in dem die Prüfung Laufwerke, die Sie entwerfen, den code besser.
py.test
zur Laufzeit.