如何加快py.test

edA*_*a-y 38 python performance pytest

有没有办法加快重复执行py.test?即使我指定在命令行上执行哪些文件,它似乎也会花费大量时间来收集测试.我知道它不是磁盘速度问题,因为在所有.py文件中运行pyflakes的速度非常快.

sca*_*nny 16

使用norecursedirspytest.ini或tox.ini中的选项可以节省大量的收集时间,具体取决于工作目录中的其他文件.当我有这样的测试时,我的收集时间大约减少了一半(0.34s vs 0.64s).

如果你已经像我一样使用tox,你只需要在tox.ini中添加以下内容:

[pytest]
norecursedirs = docs *.egg-info .git appdir .tox
Run Code Online (Sandbox Code Playgroud)

您也可以将它添加到一个独立的pytest.ini文件中.

pytest文档包含有关py.test配置文件的更多详细信息.

  • 另外(或相反),您应该配置`testpaths`,即`testpaths = src / tests`。然后,您无需跳过.git,.tox等。 (4认同)

thi*_*bot 6

我遇到了同样的问题,我py.test在我的项目的根目录调用,我的测试是三个子目录.该集合在实际测试执行0.4秒之前需要6-7秒.

我的解决方案最初是py.test使用测试的相对路径调用:

py.test src/www/tests/
Run Code Online (Sandbox Code Playgroud)

如果这样做也会加快您的收藏速度,您可以将测试的相对路径添加到addopts您的设置的末尾pytest.ini- 例如:

[pytest]
addopts = --doctest-glob='test_*.md' -x src/www/tests/
Run Code Online (Sandbox Code Playgroud)

这将收集+执行时间减少到大约一秒钟,我仍然可以py.test像以前一样打电话.

  • 更好的方法是使用“ testpaths”进行配置,即“ testpaths = src / www / tests”。 (2认同)

neu*_*nus 6

使用xdist ,您可以并行化 pytest 运行。它甚至允许将测试发送到远程机器。取决于你的设置,它可以加快很多:)

  • xdist 在每台远程计算机上收集测试,因此虽然测试套件可能会更快,但收集不会。 (2认同)

xjc*_*jcl 5

对我来说,添加PYTHONDONTWRITEBYTECODE=1环境变量实现了巨大的加速!请注意,我使用的是网络驱动器,这可能是一个因素。

  • Windows 批处理:set PYTHONDONTWRITEBYTECODE=1
  • Unix:export PYTHONDONTWRITEBYTECODE=1
  • subprocess.run:添加关键字env={'PYTHONDONTWRITEBYTECODE': '1'}
  • PyCharm 已经为我自动设置了这个变量。

请注意,前两个选项仅在当前终端会话中保持活动状态。