Python任务自动化工具tox使用教程
1、tox能做什么?
细分的用途包括:
- 创建开发环境
- 运行静态代码分析与测试工具
- 自动化构建包
- 针对tox构建的软件包运行测试
- 检查软件包是否能在不同的Python版本/解释器中顺利安装
- 统一持续集成(CI)和基于命令行的测试
- 创建和部署项目文档
- 将软件包发布到PyPI或任何其它平台
tox官方文档中列出了40余种使用场景的示例,详细的列表可查看:
https://tox.readthedocs.io/en/latest/examples.html
2、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]及其下方内容组成一个章节(section),每个章节间使用空行作间隔。
[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组花括号内各有2个值,它们实际可以组合成4个环境:py27-django15、py27-django16、py36-django15、py36-django16。
关于tox有哪些配置项、使用条件、什么含义、高级用法等等内容,可在官方文档中查看:
https://tox.readthedocs.io/en/latest/config.html
3、tox的插件化
除了自身强大的可配置性,tox还具有很强的可扩展性,它是可插拔的(pluggable),围绕它产生了一个极为丰富的插件生态。
使用pipsearchtox,可以看到数量众多的“tox-”开头的库,它们都是tox的插件包。其中不乏setuptools、pipenv、conda、travis、pytest、docker等被大家熟知的名字。
tox开放了挺多的API接口,方便其他人定制开发插件。
4、tox的工作流程
接下来看看tox是怎么运作的:
其工作流程中主要的环节有:
配置(从figuration):加载配置文件(如tox.ini),解析命令行参数,读取系统环境变量等打包(packaging):可选的,对于带有setup.py文件的项目,可以在这步去生成它的源发行版创建虚拟环境:默认使用virtualenv来创建虚拟环境,并根据配置项中的“deps”安装所需的依赖项,然后执行配置好的命令(commands)
报告(report):汇总所有虚拟环境的运行结果并罗列出来
5、小结
tox本身定位是一个测试工具,它试图令Pytho测试工作变得自动化、标准化与流程化。但跟unittest和pytest这些测试框架不同,它作用的是代码层面之外的事情,是一种项目级的工具。因此,它需要跟这些测试框架相结合,或者同时处理多种自动化任务(如跑pep8、测代码覆盖率、生成文档等等),这样才能更好地发挥它的价值。
它的一大特色在于创建/管理虚拟环境,但这只是为了方便测试而使用的手段,因此相比其它可管理虚拟环境的工具,如Virtualenvwrapper、conda、pipenv、poetry,它在某些方面就存在着不足。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。