Python任务⾃动化⼯具tox使⽤教程
1、tox 能做什么?
细分的⽤途包括:
创建开发环境
运⾏静态代码分析与测试⼯具
⾃动化构建包
针对 tox 构建的软件包运⾏测试
检查软件包是否能在不同的 Python 版本/解释器中顺利安装
统⼀持续集成(CI)和基于命令⾏的测试
创建和部署项⽬⽂档
将软件包发布到 PyPI 或任何其它平台
tox 官⽅⽂档中列出了 40 余种使⽤场景的⽰例,详细的列表可查看:
2、tox 怎么配置?
关于它的⽤法:使⽤pip install tox安装,使⽤tox运⾏全部测试环境,和tox -e envname运⾏指定的环境。还有不少的命令⾏参数,通过tox -h查看。tox 的⾏为由其配置⽂件控制,当前它⽀持 3 种配置⽂件:
每个[xxx]及其下⽅内容组成⼀个章节(section),每个章节间使⽤空⾏作间隔。
python安装教程非常详细[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 值。使⽤⽅式:tox arg1 arg2 传两个参,或者tox -- --opt1 arg1将“-- opt1 arg1”作为整体传⼊。
章节间传值:{[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 有哪些配置项、使⽤条件、什么含义、⾼级⽤法等等内容,可在官⽅⽂档中查看:
3、tox 的插件化
除了⾃⾝强⼤的可配置性,tox 还具有很强的可扩展性,它是可插拔的(pluggable),围绕它产⽣了⼀个极为丰富的插件⽣态。
使⽤pip search tox,可以看到数量众多的“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,它在某些⽅⾯就存在着不⾜。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论