簡體   English   中英

如何加速pytest

[英]How to speed up pytest

有什么方法可以加快pytest的重復執行pytest嗎? 似乎花費了大量時間收集測試,即使我在命令行上指定要執行哪些文件。 我知道這也不是磁盤速度問題,因為在所有 .py 文件中運行 pyflakes 非常快。


各種答案代表了 pytest 可能變慢的不同方式。 他們有時有所幫助,而在其他方面則沒有。 我正在添加一個解釋常見速度問題的答案。 但是這里不可能選擇“The”答案。

使用 pytest.ini 或 tox.ini 中的norecursedirs選項可以節省大量收集時間,具體取決於您的工作目錄中還有哪些其他文件。 當我進行了 300 次測試時,我的收集時間大約減半(0.34 秒對 0.64 秒)。

如果你已經像我一樣使用tox ,你只需要在你的 tox.ini 中添加以下內容:

[pytest]
norecursedirs = docs *.egg-info .git appdir .tox

您還可以將其添加到獨立的pytest.ini文件中。

pytest 文檔有關於pytest 配置文件的更多細節。

我遇到了同樣的問題,我在項目的根目錄下調用pytest並且我的測試在三個子目錄下。 在實際測試執行 0.4 秒之前,收集需要 6-7 秒。

我的解決方案最初是使用測試的相對路徑調用pytest

pytest src/www/tests/

如果這樣做也可以加快您的收集速度,您可以將測試的相對路徑添加到addopts設置的pytest.ini - 例如:

[pytest]
addopts = --doctest-glob='test_*.md' -x src/www/tests/

這將收集 + 執行時間降低到大約一秒鍾,我仍然可以像以前一樣調用pytest

使用xdist,您可以並行化 pytest 運行。 它甚至允許將測試發送到遠程機器。 取決於您的設置,它可以加快相當多的速度:)

在您在 cygwin 的 python 下運行的特殊情況下,其 unix 樣式的文件處理速度很慢。 有關如何在這種特殊情況下加快速度的信息,請參閱pytest.py test very slow startup in cygwin

bash ,嘗試{ find -name '*_test.py'; find -name 'test_*.py'; } | xargs pytest { find -name '*_test.py'; find -name 'test_*.py'; } | xargs pytest { find -name '*_test.py'; find -name 'test_*.py'; } | xargs pytest

對我來說,這將總測試時間縮短到幾分之一秒。

如果您正在運行某些防病毒軟件,請嘗試將其關閉。 我有這個完全相同的問題。 收集測試運行得非常慢。 結果是我的防病毒軟件 (Avast) 導致了問題。 當我禁用防病毒軟件時,測試收集的運行速度大約快了五倍。 我測試了幾次,打開和關閉防病毒軟件,所以我毫不懷疑這是我的原因。

編輯:明確地說,我認為不應該關閉和停止防病毒軟件。 我只是建議暫時關閉它,看看它是否是減速的根源。 就我而言,確實如此,所以我尋找了其他沒有相同問題的防病毒解決方案。

對我來說,將PYTHONDONTWRITEBYTECODE=1添加到我的環境變量中實現了巨大的加速! 請注意,我正在使用網絡驅動器,這可能是一個因素。

  • Windows 批處理: set PYTHONDONTWRITEBYTECODE=1
  • Unix: export PYTHONDONTWRITEBYTECODE=1
  • subprocess.run :添加關鍵字env={'PYTHONDONTWRITEBYTECODE': '1'}
  • PyCharm 已經為我自動設置了這個變量。

請注意,前兩個選項僅對您當前的終端會話保持活動狀態。

Pytest 導入testpaths目錄中的所有模塊以查找測試。 導入本身可能很慢。 如果您直接運行這些測試,這與您所經歷的啟動時間相同,但是,由於它會導入所有文件,因此需要更長的時間。 這是一種最壞的情況。

但這不會為整個測試運行增加時間,因為無論如何它都需要導入這些文件來執行測試。

如果您將命令行上的搜索范圍縮小到特定文件或目錄,它只會導入這些文件或目錄。 在運行特定測試時,這可能是一個顯着的加速。

加速這些導入涉及修改這些模塊。 模塊的大小和可傳遞的導入會減慢啟動速度。 另外查找任何執行的代碼——函數之外的代碼。 這也需要在測試收集階段執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM