常見問題及解決方案
1. 測試通過了,但覆蓋率不達標
現象:
雖然所有測試都通過了,但覆蓋率報告顯示某些代碼沒有被覆蓋。
解決方案:
- 檢查覆蓋率配置:確保
.coveragerc
或pytest.ini
中正確設置了要分析的源代碼路徑。 - 使用標記(markers)排除測試文件本身:避免測試代碼也被計入覆蓋率統計。
[run]
source = src
omit =*/tests/**/test_*.py
- 增加更多邊界條件測試:特別是異常處理、輸入驗證等容易遺漏的地方。
2. 測試運行慢,影響開發效率
現象:
每次跑測試都要等很久,嚴重影響開發節奏。
解決方案:
- 使用
--ff
參數:只重新運行上次失敗的測試,快速反饋。
pytest --ff
- 并行運行測試:安裝
pytest-xdist
插件,并行執行多個測試用例。
pip install pytest-xdist
pytest -n auto
- 優化測試數據準備:使用
@pytest.fixture(scope="module")
減少重復初始化。
@pytest.fixture(scope="module")
def setup_data():# 只初始化一次yield data
3. 測試依賴外部服務,導致不穩定
現象:
測試依賴數據庫、API 等外部服務,導致測試偶爾失敗。
解決方案:
- 使用
unittest.mock
模擬外部服務:隔離依賴,確保測試穩定。
from unittest.mock import patch@patch("my_module.external_service_call")