SciPy-Tests Lokal Ausführen#
Das grundlegende Schreiben und Ausführen von Tests innerhalb des Python-Interpreters ist im NumPy/SciPy Testing Guidelines dokumentiert. Diese Seite enthält Informationen zum Ausführen von Tests von der Kommandozeile aus mit SciPys dev.py Kommandozeilen-Tool. Hinweis: Stellen Sie vor Beginn sicher, dass pytest installiert ist.
Hinweis
Die dev.py Schnittstelle ist selbstdokumentierend, in dem Sinne, dass alles auf dieser Seite und mehr (einschließlich Anwendungsbeispiele für jeden Befehl) mit python dev.py --help und für einzelne Befehle wie python dev.py <command-name> --help abgerufen werden kann. In diesem Fall können Sie python dev.py test --help überprüfen.
Um alle Tests auszuführen, navigieren Sie im Kommandozeilenfenster zum SciPy-Stammverzeichnis und führen Sie
python dev.py test
Dies baut SciPy (oder aktualisiert eine bestehende Build) und führt die Tests aus.
Um Tests für ein bestimmtes Untermodul, wie z. B. optimize, auszuführen, verwenden Sie die Option --submodule
python dev.py test -s optimize
Um ein bestimmtes Testmodul auszuführen, verwenden Sie die Pytest-Syntax von --test (oder -t)
python dev.py test -t scipy.<module>.tests.<test_file>
Beispiel für Tests in der Datei scipy/optimize/tests/test_linprog.py, führen Sie aus
python dev.py test -t scipy.optimize.tests.test_linprog
Um eine Testklasse auszuführen
python dev.py test -t scipy.<module>.tests.<test_file>::<TestClass>
Beispiel für die Klasse TestLinprogRSCommon aus test_linprog.py
python dev.py test -t scipy.optimize.tests.test_linprog::TestLinprogRSCommon
Um einen bestimmten Test auszuführen
python dev.py test -t scipy.<module>.tests.<test_file>::<test_name>
Beispiel für test_unknown_solvers_and_options aus test_linprog.py
python dev.py test -t scipy.optimize.tests.test_linprog::test_unknown_solvers_and_options
Für Tests innerhalb einer Klasse müssen Sie den Klassennamen und den Testnamen angeben
python dev.py test -t scipy.<module>.tests.<test_file>::<TestClass>::<test_name>
Beispiel
python dev.py test -t scipy.optimize.tests.test_linprog::TestLinprogRSCommon::test_nontrivial_problem_with_guess
Weitere nützliche Optionen sind
-voder--verbose, was die ausführliche Option für detailliertere Ausgaben aktiviert.-boder--array-api-backendbackend, um alternative Array-Backends in Array-API-kompatiblen Tests einzubeziehen. Details finden Sie unter Unterstützung des Array-API-Standards.--coverage, um einen Test-Coverage-Bericht inscipy/build/coverage/index.htmlzu generieren. Hinweis:pytest-covmuss installiert sein.-noder--no-build, um zu verhindern, dass SciPy die Build vor dem Testen aktualisiert-joder--paralleln, um n Kerne beim Bauen von SciPy zu verwenden; z. B.python dev.py test -j 4verwendet vier Kerne. Ab #10172 werden die Tests auch mit vier Kernen ausgeführt, wennpytest-xdistinstalliert ist.-m fulloder--mode full, um die „vollständige“ Testsuite auszuführen, einschließlich Tests, die mitslowgekennzeichnet sind (z. B. mit@pytest.mark.slow). Beachten Sie, dass dies keine Tests ausführt, die mitxslowgekennzeichnet sind; siehe Tipps unten.--, um verbleibende Kommandozeilenargumente anpytestanstelle vondev.py testzu übergeben. Zum Beispiel, während-nanpytest.pygesendet die Option--no-buildaktiviert, führt-nanpytestgesendet die Tests auf mehreren Kernen aus; z. B.python dev.py test -- -n 4führt Tests mit vier Kernen aus. Hinweis:pytest-xdistmuss für Tests auf mehreren Kernen installiert sein. Gängige Kommandozeilenargumente fürpytestsind--durations=m, um die Dauer der langsamstenmTests anzuzeigen. Verwenden Sie--durations=0zusammen mit--durations-min=x, um die Dauer aller Tests anzuzeigen, deren DauerxSekunden überschreitet.--fail-slow=x, um Tests fehlschlagen zu lassen, wenn siexSekunden überschreiten. (Hinweis:pytest-fail-slowmuss installiert sein.)--timeout=x, um die Ausführung aller Tests abzubrechen, wenn die Zeit eines TestsxSekunden überschreitet. (Hinweis:pytest-timeoutmuss installiert sein.)
Für viel mehr Informationen zu pytest, siehe die pytest Dokumentation.
Tipps:#
Wenn Sie SciPy aus dem Quellcode erstellt haben, aber nach einer Änderung der Codebasis Probleme beim Ausführen von Tests haben, versuchen Sie, das Verzeichnis scipy/build zu löschen. Dies zwingt dev.py, SciPy vor der Durchführung von Tests vollständig neu zu erstellen.
Es gibt eine zusätzliche Ebene sehr langsamer Tests (mehrere Minuten), die selbst dann deaktiviert sind, wenn python dev.py test -m full aufgerufen wird. Sie können aktiviert werden, indem Sie die Umgebungsvariable SCIPY_XSLOW=1 setzen, bevor Sie die Testsuite ausführen.
Standardmäßig werden Tests, die Hypothesis verwenden, mit dem deterministic Profil ausgeführt, das in scipy/scipy/conftest.py definiert ist. Dieses Profil enthält die Hypothesis-Einstellung derandomize=True, sodass dieselben Beispiele verwendet werden, bis Hypothesis, Python oder die Testfunktion aktualisiert werden. Um die Fähigkeiten von Hypothesis zur Findung von Gegenbeispielen besser zu nutzen, wählen Sie das nondeterministic Profil, indem Sie die Umgebungsvariable SCIPY_HYPOTHESIS_PROFILE=nondeterministic setzen, bevor Sie die Testsuite ausführen. Die Anzahl der ausgeführten Beispiele kann durch Bearbeiten der ausgewählten Konfiguration konfiguriert werden, z. B. durch Hinzufügen von max_examples=100_000.