在本機端執行 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
。