Python任务自动化工具tox使用教程


Posted in Python onMarch 17, 2020

1、tox 能做什么?

细分的用途包括:

  • 创建开发环境
  • 运行静态代码分析与测试工具
  • 自动化构建包
  • 针对 tox 构建的软件包运行测试
  • 检查软件包是否能在不同的 Python 版本/解释器中顺利安装
  • 统一持续集成(CI)和基于命令行的测试
  • 创建和部署项目文档
  • 将软件包发布到 PyPI 或任何其它平台

tox 官方文档中列出了 40 余种使用场景的示例,详细的列表可查看:

https://tox.readthedocs.io/en/latest/examples.html

Python任务自动化工具tox使用教程

2、tox 怎么配置?

关于它的用法:使用pip install tox安装,使用tox运行全部测试环境,和tox -e envname运行指定的环境。还有不少的命令行参数,通过tox -h查看。

tox 的行为由其配置文件控制,当前它支持 3 种配置文件:

pyproject.tomltox.inisetup.cfg

以 tox 项目自己的 tox.ini 配置内容为例,可以看到它是这样配置的(https://github.com/tox-dev/tox/blob/master/tox.ini):

Python任务自动化工具tox使用教程

Python任务自动化工具tox使用教程

每个[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 值。使用方式: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 有哪些配置项、使用条件、什么含义、高级用法等等内容,可在官方文档中查看:

https://tox.readthedocs.io/en/latest/config.html

3、tox 的插件化

除了自身强大的可配置性,tox 还具有很强的可扩展性,它是可插拔的(pluggable),围绕它产生了一个极为丰富的插件生态。

使用pip search tox,可以看到数量众多的“tox-”开头的库,它们都是 tox 的插件包。其中不乏 setuptools、pipenv、conda、travis、pytest、docker 等被大家熟知的名字。

Python任务自动化工具tox使用教程

tox 开放了挺多的 API 接口,方便其他人定制开发插件。

Python任务自动化工具tox使用教程

4、tox 的工作流程

接下来看看 tox 是怎么运作的:

Python任务自动化工具tox使用教程

其工作流程中主要的环节有:

配置(从figuration):加载配置文件(如 tox.ini),解析命令行参数,读取系统环境变量等打包(packaging):可选的,对于带有 setup.py 文件的项目,可以在这步去生成它的源发行版创建虚拟环境:默认使用 virtualenv 来创建虚拟环境,并根据配置项中的“deps”安装所需的依赖项,然后执行配置好的命令(commands)

报告(report):汇总所有虚拟环境的运行结果并罗列出来

5、小结

tox 本身定位是一个测试工具,它试图令 Pytho 测试工作变得自动化、标准化与流程化。但跟 unittest 和 pytest 这些测试框架不同,它作用的是代码层面之外的事情,是一种项目级的工具。因此,它需要跟这些测试框架相结合,或者同时处理多种自动化任务(如跑 pep8、测代码覆盖率、生成文档等等),这样才能更好地发挥它的价值。

它的一大特色在于创建/管理虚拟环境,但这只是为了方便测试而使用的手段,因此相比其它可管理虚拟环境的工具,如 Virtualenvwrapper、conda、pipenv、poetry,它在某些方面就存在着不足。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现simhash算法实例
Apr 25 Python
python计算圆周率pi的方法
Jul 11 Python
Python编程把二叉树打印成多行代码
Jan 04 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
django ModelForm修改显示缩略图 imagefield类型的实例
Jul 28 Python
python使用 __init__初始化操作简单示例
Sep 26 Python
Python 迭代,for...in遍历,迭代原理与应用示例
Oct 12 Python
pandas读取csv文件提示不存在的解决方法及原因分析
Apr 21 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
Jun 24 Python
python利用 keyboard 库记录键盘事件
Oct 16 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 Python
python爬取某网站原图作为壁纸
Jun 02 Python
vue常用指令代码实例总结
Mar 16 #Python
django-利用session机制实现唯一登录的例子
Mar 16 #Python
python安装dlib库报错问题及解决方法
Mar 16 #Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
Mar 16 #Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
Mar 16 #Python
Python3.6 中的pyinstaller安装和使用教程
Mar 16 #Python
python pandas利用fillna方法实现部分自动填充功能
Mar 16 #Python
You might like
php页面消耗内存过大的处理办法
2013/03/18 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
jQuery元素选择器用法实例
2014/12/23 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
利用Python的turtle库绘制玫瑰教程
2019/11/23 Python
Python range与enumerate函数区别解析
2020/02/28 Python
django API 中接口的互相调用实例
2020/04/01 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
会计助理的岗位职责
2013/11/29 职场文书
销售总监岗位职责
2014/01/04 职场文书
成龙洗发水广告词
2014/03/14 职场文书
大学生社会实践方案
2014/05/11 职场文书
优秀党员先进材料
2014/12/18 职场文书
车间主任岗位职责
2015/02/03 职场文书
可怜妈妈观后感
2015/06/09 职场文书
运动会通讯稿200字
2015/07/20 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书
ORACLE数据库对long类型字段进行模糊匹配的解决思路
2021/04/07 Oracle
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL