当前位置: 首页 > 后端技术 > Python

Python任务自动化工具tox教程_0

时间:2023-03-26 15:42:30 Python

在我刚刚翻译的Python打包系列文章中,作者提到了一个神奇的测试工具tox,而他本人就是tox的维护者之一。趁着话题的相关性,本文将对其做一个简单的介绍,说不定大家在开发项目的时候可以用到。命令行驱动的CI前端和开发任务自动化工具命令行驱动的CI前端和开发任务自动化工具tox项目地址为:https://github.com/tox-dev/tox其核心功能是支持创建隔离的Python环境,里面可以安装不同版本的Python解释器和各种依赖库,方便开发者做自动化测试、打包、持续集成等事情。简单地说,tox是一个用于管理测试虚拟环境的命令行工具。它已经存在多年,并被开发人员广泛使用。例如著名的云计算平台OpenStack也将其作为最基础的测试工具之一。1.tox能做什么?细分用途包括:创建开发环境运行静态代码分析和测试工具自动化构建包对使用tox构建的包进行测试检查包是否可以在不同的Python版本/解释器中顺利安装统一持续集成(CI)和基于命令行的测试创建和部署项目文档发布软件包到PyPI或任何其他平台Tox官方文档列出了40多个使用场景示例,详细列表可以查看:https://tox.readthedocs.io/en/latest/examples.html2,如何配置tox?关于其使用方法:使用pipinstalltox安装,使用tox运行所有测试环境,tox-eenvname运行指定环境。还有很多命令行参数,可以通过tox-h查看。tox的行为由其配置文件控制。目前支持3个配置文件:pyproject.tomltox.inisetup.cfg以tox项目的tox.ini配置内容为例,可以看到是这样配置的(https://github.com/tox-dev/tox/blob/master/tox.ini):每个[xxx]及其下面的内容构成一个节,每个节之间用空行作为间隔。[tox]下面是全局配置项,envlist字段定义了tox运行的环境。[xxx]是下面xxx虚拟环境的配置项,[xxx:yyy]继承了xxx的配置,自己的配置项优先级更高。对于每一个虚拟环境,都有很多可用的配置项,比如:description(描述信息)、basepython(Python解释器版本)、deps(环境依赖)、commands(命令语句)等。tox还支持变量替换,它提供一些内置的基本变量(全局或虚拟环境):{toxinidir}、{homedir}、{envname}、{envdir}等。除了基本变量替换外,它还支持这些高级用法:获取环境变量操作系统:{env:KEY},效果等同于os.environ['KEY']。可以改为:{env:KEY:DEFAULTVALUE},获取不到环境变量时使用默认值;{env:KEY:{env:DEFAULT_OF_KEY}},实现if-else传命令行参数的取值效果:{posargs:DEFAULTS},当没有命令行参数时,使用DEFAULTS值。使用方法:toxarg1arg2传递两个参数,或者tox----opt1arg1将"--opt1arg1"作为一个整体传递。章节之间传值:{[sectionname]valuename},不同章节的内容可以传递使用。交互式控制台注入:{tty:ON_VALUE:OFF_VALUE},当交互式shell控制台打开时,使用第一个值,否则使用第二个。pytest是使用“--pdb”时的一个例子。花括号“{}”不仅可以用于变量替换,还可以作为“或关系”判断的取值。直接看下面的例子:[tox]envlist={py27,py36}-django{15,16}{py27,py36}-django{15,16}2组curly各有2个值大括号,其实可以组合成4个环境:py27-django15、py27-django16、py36-django15、py36-django16。关于tox的配置项、使用条件、含义、高级用法等可以查看官方文档:https://tox.readthedocs.io/en/latest/config.html3,插件的tox除了自身强大的可配置性之外,tox还具有很强的扩展性,它是可插拔的,围绕它产生了极其丰富的插件生态。使用pipsearchtox可以看到大量以“tox-”开头的库,都是tox的插件包。其中有setuptools、pipenv、conda、travis、pytest、docker等耳熟能详的名字。tox开放了很多API接口,方便别人定制和开发插件。4.Tox工作流程接下来我们看看tox是如何工作的:其工作流程中的主要环节是:配置(fromfiguration):加载配置文件(如tox.ini)、解析命令行参数、读取系统环境变量等packaging(打包):可选,对于有setup.py文件的项目,可以在这一步生成其源码分发创建虚拟环境:默认使用virtualenv创建虚拟环境,并根据配置项“deps”安装requireddependencies,然后执行配置的命令(commands)报告(report):汇总所有虚拟环境的运行结果并列出5.总结Tox本身定位为测试工具,它试图让Python测试工作变得自动化,标准化和精简。但与unittest、pytest等测试框架不同的是,它的工作超越了代码层面,是一个项目层面的工具。因此需要与这些测试框架结合,或者同时处理多项自动化任务(比如运行pep8、测试代码覆盖率、生成文档等),才能更好地发挥其价值。它的一大特点是创建/管理虚拟环境,但这只是为了方便测试使用,所以相对于其他可以管理虚拟环境的工具,如Virtualenvwrapper、conda、pipenv、poetry,它存在于一些尊重不足。tox还具有强大的可配置性和丰富的插件支持,这使得它在使用上具有很大的可能性和自由度。因此,许多忠实的开发者仍在使用它。比如我刚才翻译的系列文章的作者就是它的维护者之一。最后需要补充一点,tox是使用配置文件作为驱动的,但是配置文件比较繁琐,所以有人开发了一个类似tox的nox,使用Python文件进行配置。这个项目也很受欢迎,吸引了很多项目投资,比如pipx、urllib3、Salt等等。如果对本项目感兴趣,请查看:https://nox.thea.codes/en/stable/公众号【Python猫】,本号连载一系列优质文章,包括喵星哲学猫系列、Python进阶系列、好书推荐系列、技术写作、优质英文推荐及翻译等,欢迎关注。