跳轉至

建立 2026-10-11 更新 2026-10-11

常用外掛

pytest 外掛(plugin)是擴充 pytest 功能的套件,安裝後通常會自動啟用,不需要額外設定。最常用的是 pytest-cov(測量測試覆蓋率)與 pytest-xdist(多核心平行執行),其他還有處理非同步程式、隨機執行順序等外掛。本頁介紹最值得先認識的幾個。

常用外掛一覽

外掛 用途 常用指令
pytest-cov 測量覆蓋率(哪些程式碼被測試執行過) pytest --cov=my_package
pytest-xdist 用多個 CPU 核心平行執行測試 pytest -n auto
pytest-mock 提供 mocker fixture,見 Mock —
pytest-randomly 每次打亂測試順序,找出彼此相依的測試 pytest -p no:randomly 暫停使用
pytest-asyncio 測試 async def 函式 @pytest.mark.asyncio
pytest-django、Flask/FastAPI 測試工具 網頁框架整合 依框架而定

以 uv 安裝為開發依賴:

uv add --dev pytest-cov pytest-xdist

測量覆蓋率:pytest-cov

覆蓋率(coverage)是「測試執行時,被跑到的程式碼占全部程式碼的比例」。pytest-cov 底層使用 coverage.py:

pytest --cov=my_package --cov-report=term-missing
Name                         Stmts   Miss  Cover   Missing
----------------------------------------------------------
src/my_package/exchange.py      10      2    80%   7-8
src/my_package/shop.py           5      0   100%
----------------------------------------------------------
TOTAL                           15      2    87%

Missing 欄列出沒有被執行過的行號,這是覆蓋率報告最有用的資訊:它直接告訴你哪些分支沒測到。其他報告格式:

  • --cov-report=html:產生可在瀏覽器逐行檢視的 htmlcov/ 報告。
  • --cov-fail-under=80:覆蓋率低於 80% 時讓測試失敗,常用在 CI。

覆蓋率是找漏洞的工具,不是目標

100% 覆蓋率只代表每一行都被執行過,不代表每個結果都被正確驗證。沒有 assert 的測試也能把覆蓋率拉高。把它當成「哪裡完全沒測」的提示,而不是追求的分數。

平行執行:pytest-xdist

測試多到要跑好幾分鐘時,pytest-xdist 能把測試分配給多個行程(process)同時執行:

pytest -n auto      # 依 CPU 核心數自動決定行程數
pytest -n 4         # 指定 4 個行程

平行執行的前提是測試彼此獨立:如果兩個測試寫入同一個檔案或同一筆資料庫資料,平行時就可能互相干擾。用 tmp_path 與 function 範圍的 fixture 可以避免這類問題。

怎麼找外掛?

pytest 官方維護一份 外掛清單,列出上千個外掛與最後更新日期。挑選時優先考慮 pytest-dev 組織維護的外掛,並確認近期仍有更新、支援你使用的 pytest 版本。

推薦影音

pytest Basics: Test Parallelization with pytest-xdist

約 5 分鐘的短片,示範安裝 pytest-xdist 並用 -n 平行執行測試,觀察執行時間的差異。

I don't use pytest-cov

pytest 核心開發者 Anthony Sottile 說明他為什麼直接使用 coverage.py 而不透過 pytest-cov 外掛,適合想了解覆蓋率工具運作方式、比較兩種做法的進階讀者。