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

  • -v oder --verbose, was die ausführliche Option für detailliertere Ausgaben aktiviert.

  • -b oder --array-api-backend backend, 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 in scipy/build/coverage/index.html zu generieren. Hinweis: pytest-cov muss installiert sein.

  • -n oder --no-build, um zu verhindern, dass SciPy die Build vor dem Testen aktualisiert

  • -j oder --parallel n, um n Kerne beim Bauen von SciPy zu verwenden; z. B. python dev.py test -j 4 verwendet vier Kerne. Ab #10172 werden die Tests auch mit vier Kernen ausgeführt, wenn pytest-xdist installiert ist.

  • -m full oder --mode full, um die „vollständige“ Testsuite auszuführen, einschließlich Tests, die mit slow gekennzeichnet sind (z. B. mit @pytest.mark.slow). Beachten Sie, dass dies keine Tests ausführt, die mit xslow gekennzeichnet sind; siehe Tipps unten.

  • --, um verbleibende Kommandozeilenargumente an pytest anstelle von dev.py test zu übergeben. Zum Beispiel, während -n an pytest.py gesendet die Option --no-build aktiviert, führt -n an pytest gesendet die Tests auf mehreren Kernen aus; z. B. python dev.py test -- -n 4 führt Tests mit vier Kernen aus. Hinweis: pytest-xdist muss für Tests auf mehreren Kernen installiert sein. Gängige Kommandozeilenargumente für pytest sind

    • --durations=m, um die Dauer der langsamsten m Tests anzuzeigen. Verwenden Sie --durations=0 zusammen mit --durations-min=x, um die Dauer aller Tests anzuzeigen, deren Dauer x Sekunden überschreitet.

    • --fail-slow=x, um Tests fehlschlagen zu lassen, wenn sie x Sekunden überschreiten. (Hinweis: pytest-fail-slow muss installiert sein.)

    • --timeout=x, um die Ausführung aller Tests abzubrechen, wenn die Zeit eines Tests x Sekunden überschreitet. (Hinweis: pytest-timeout muss 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.