今天要介紹 pytest 的插件,插件是 pytest 的特點之一,豐富的第三方插件讓 pytest 在測試上有很大的自由度。今天就要來介紹幾個好用的插件。
當測試的 case 越來越多的時候,要完整跑過一輪測試會花上很長的時間,若是一條一條執行的話可能會花好幾小時才跑完一輪,非常沒有效率,這個時候就可以使用 xdist 這個插件來處理這個問題,達到平行測試的效果。
簡單來講就是在同一時間內同時執行多個測試,通常會在不同的 CPU 核心上分開執行。
首先要安裝插件
pip install pytest-xdist
然後在終端輸入
pytest -n auto
就會開始執行平行測試。auto 指令會自動抓你的電腦有幾顆 CPU 核心並全部使用,若要指定一次執行幾項測試在 auto 的地方改成數字,例如要一次執行三條 case 就輸入pytest -n 3
雖然平行測試聽起來好像很方便,跑一次測試可以節省兩三倍以上的時間,但還是有一些限制:
雖然理論上 CPU 有多少顆核心就可以一次執行多少條測試,但是一次跑太多條不只不會變快,反而會讓測試變卡,甚至會導致測試 crash,以筆者當時在筆電測試,雖然理論上可以一次跑八條,但是實際上設定到 3 條以上就會導致測試當機。
若不同測試之間有關連性而非獨立,在執行平行測試時可能會發生衝突而導致測試無法按照預期進行,可以透過dist=loadscope
來將測試分組,確保不會發生衝突。
xdist 是個實用的插件,只要注意它的限制,可以最大幅度的節省一輪測試進行的時間,明天預計會介紹更多實用插件。