在本機端執行 SciPy 測試#

在 Python 直譯器中撰寫和執行基本測試的文件,請參閱NumPy/SciPy 測試指南。本頁包含有關使用 SciPy 的 dev.py 命令列工具從命令列執行測試的資訊。注意:在開始之前,請確保已安裝 pytest

注意

dev.py 介面具有自我說明功能,也就是說,本頁面上的所有內容以及更多內容(包括每個命令的使用範例)都可以使用 python dev.py --help 存取,而個別命令則可以使用 python dev.py <命令名稱> --help 存取。在本例中,您可以查看 python dev.py test --help

若要執行所有測試,請在命令列中導覽至 SciPy 根目錄並執行

python dev.py test

這會建置 SciPy(或更新現有建置)並執行測試。

若要對特定子模組(例如 optimize)執行測試,請使用 --submodule 選項

python dev.py test -s optimize

若要執行特定的測試模組,請使用 Pytest 語法 --test (或 -t)

python dev.py test -t scipy.<module>.tests.<test_file>

執行 scipy/optimize/tests/test_linprog.py 檔案測試的範例,請執行

python dev.py test -t scipy.optimize.tests.test_linprog

若要執行測試類別

python dev.py test -t scipy.<module>.tests.<test_file>::<TestClass>

執行 test_linprog.py 中的 TestLinprogRSCommon 類別的範例

python dev.py test -t scipy.optimize.tests.test_linprog::TestLinprogRSCommon

若要執行特定測試

python dev.py test -t scipy.<module>.tests.<test_file>::<test_name>

執行 test_linprog.py 中的 test_unknown_solvers_and_options 的範例

python dev.py test -t scipy.optimize.tests.test_linprog::test_unknown_solvers_and_options

對於類別內的測試,您需要指定類別名稱和測試名稱

python dev.py test -t scipy.<module>.tests.<test_file>::<TestClass>::<test_name>

範例

python dev.py test -t scipy.optimize.tests.test_linprog::TestLinprogRSCommon::test_nontrivial_problem_with_guess

其他有用的選項包括

  • -v--verbose,啟用詳細模式選項以取得更詳細的輸出。

  • -b--array-api-backend backend,在 array-api 相容的測試中包含替代陣列後端。請參閱支援陣列 API 標準以取得詳細資訊。

  • --coverage 以在 scipy/build/coverage/index.html 中產生測試覆蓋率報告。注意: pytest-cov 必須安裝。

  • -n--no-build,以防止 SciPy 在測試前更新建置

  • -j--parallel n,在建置 SciPy 時啟用 n 個核心;例如,python dev.py test -j 4 啟用四個核心。從 #10172 開始,如果安裝了 pytest-xdist,這也會在四個核心上執行測試。

  • -m full--mode full,以執行「完整」測試套件,包括標記為 slow 的測試(例如使用 @pytest.mark.slow)。請注意,這不會執行標記為 xslow 的測試;請參閱下方的「提示」。

  • --,將剩餘的命令列引數傳送給 pytest 而不是 dev.py test。例如,雖然傳送給 pytest.py-n 會啟用 --no-build 選項,但傳送給 pytest-n 會在多個核心上執行測試;例如,python dev.py test -- -n 4 使用四個核心執行測試。注意:必須安裝 pytest-xdist 才能在多個核心上進行測試。pytest 的常見命令列引數包括

    • --durations=m,顯示最慢的 m 個測試的持續時間。將 --durations=0--durations-min=x 一起使用,以顯示持續時間超過 x 秒的所有測試的持續時間。

    • --fail-slow=x,若測試超過 x 秒則使測試失敗。(注意:必須安裝 pytest-fail-slow。)

    • --timeout=x,若任何測試時間超過 x 秒則中止所有測試執行。(注意:必須安裝 pytest-timeout。)

如需更多關於 pytest 的資訊,請參閱 pytest 文件

提示:#

如果您從原始碼建置 SciPy,但在變更程式碼庫後執行測試時遇到問題,請嘗試刪除 scipy/build 目錄。這會強制 dev.py 在執行測試之前完全重建 SciPy。

還有一個額外的極慢速測試層級(幾分鐘),即使在呼叫 python dev.py test -m full 時也會停用。可以透過在執行測試套件之前設定環境變數 SCIPY_XSLOW=1 來啟用它們。

預設情況下,使用 Hypothesis 的測試會以 scipy/scipy/conftest.py 中定義的 deterministic 設定檔執行。此設定檔包含 Hypothesis 設定 derandomize=True,因此會使用相同的範例,直到 Hypothesis、Python 或測試函式更新為止。為了更好地利用 Hypothesis 尋找反例的能力,請在執行測試套件之前設定環境變數 SCIPY_HYPOTHESIS_PROFILE=nondeterministic,以選取 nondeterministic 設定檔。可以透過編輯選取的組態來設定執行的範例數量,例如新增 max_examples=100_000