本文共 2690 字,大约阅读时间需要 8 分钟。
python tox
Python是当今使用的最之一,并且有充分的理由:它是开源的,具有广泛的用途(例如Web编程,业务应用程序,游戏,科学编程等等),并且有一个充满活力和敬业精神的社区来支持它。 这个社区的原因是我们在 (PyPI)中拥有如此众多,种类繁多的软件包,以扩展和改进Python并解决不可避免的小问题。
在本系列中,我们将研究七个PyPI库,它们可以帮助您解决常见的Python问题。 今天,我们将研究 ,这是一种用于自动执行Python代码测试的工具。
编写Python代码时,最好进行自动检查。 尽管您可以将直接运行检查的规则转储到持续集成(CI)环境中,但很少是最佳选择。 除其他外,使用CI运行的相同参数在本地运行测试非常有用,以节省CI时间。
tox项目旨在针对不同版本的Python和不同版本的依赖项运行不同的检查。 很快,我们发现限制因素不是毒物的灵活性,而是选择组合爆炸的严酷现实!
例如,简单的tox配置可以针对多个版本的Python运行相同的测试。
[ tox ] envlist = py36 , py37 [ testenv ] deps = pytest commands = pytest mylibrary
Tox将根据环境的版本自动使用正确的解释器版本来创建虚拟环境。 如果缺少虚拟环境或依赖关系发生变化,Tox将自动重建虚拟环境。
可以在环境中明确指示Python版本。
[ tox ] envlist = py36 , py37 , docs [ testenv ] deps = pytest commands = pytest mylibrary [ testenv:docs ] changedir = docs deps = sphinx commands = sphinx-build -W -b html -d { envtmpdir } /doctrees . { envtmpdir } /html basepython = python3.7
本示例使用构建该库的文档。 一件好事是Sphinx库将仅安装在docs虚拟环境中。 如果mylibrary在Sphinx上导入但忘记指出显式依赖关系,则测试将正确失败。
我们还可以使用tox在不同版本的依赖项下运行测试。
[ tox ] envlist = { py36 , py37 } - { minimum , current } [ testenv ] deps = minimum: thirdparty == 1.0 current: thirdparty pytest commands = pytest mylibrary
这将运行四个不同的测试运行: py36-minimum , py36-current , py37-minimum和py37-current 。 在我们的库依赖于第三方> = 1.0的情况下,这很有用:每次测试都确保我们仍然与1.0版本兼容,同时还要确保最新版本不会破坏我们。
将短毛绒毒打也是一个好主意。 例如,运行会做正确的事。
[ tox ] envlist = py36 , py37 , py36-black [ testenv ] deps = pytest commands = pytest mylibrary [ testenv:py36-black ] deps = black commands = black --check --diff mylibrary
默认情况下,tox将运行所有测试环境。 但是,您只能运行一个环境。 例如,如果只想运行Black,请运行tox -e py36-black 。
如果您关心的是Python库,请将tox.ini添加到工作流程中以保持其高质量。
在本系列的下一篇文章中,我们将介绍flake8 ,这是一个linter和linting平台,可确保Python代码的一致性。
翻译自:
python tox
转载地址:http://fvbzd.baihongyu.com/