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 相关文章推荐
Django集成百度富文本编辑器uEditor攻略
Jul 04 Python
用Python编写一个基于终端的实现翻译的脚本
Apr 24 Python
python实用代码片段收集贴
Jun 03 Python
flask中的wtforms使用方法
Jul 21 Python
Python实现网站表单提交和模板
Jan 15 Python
python线程安全及多进程多线程实现方法详解
Sep 27 Python
python列表删除和多重循环退出原理详解
Mar 26 Python
为什么称python为胶水语言
Jun 16 Python
python能做哪些生活有趣的事情
Sep 09 Python
Python超简单容易上手的画图工具库推荐
May 10 Python
Python的这些库,你知道多少?
Jun 09 Python
pandas进行数据输入和输出的方法详解
Mar 23 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
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
jquery cookie插件代码类
2009/05/26 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
使用jquery.validate自定义方法实现"手机号码或者固话至少填写一个"的逻辑验证
2014/09/01 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
Jquery on方法绑定事件后执行多次的解决方法
2016/06/02 Javascript
Bootstrap Table使用方法详解
2016/08/01 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
2016/09/01 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
关于angularJs清除浏览器缓存的方法
2017/11/28 Javascript
JS设计模式之策略模式概念与用法分析
2018/02/05 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
JavaScript实现手风琴效果
2021/02/18 Javascript
Python中%r和%s的详解及区别
2017/03/16 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
pycharm新建一个python工程步骤
2019/07/16 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
Python with标签使用方法解析
2020/01/17 Python
Farfetch澳大利亚官网:Farfetch Australia
2020/04/26 全球购物
开发中都用到了那些设计模式?用在什么场合?
2014/08/21 面试题
九年级政治教学反思
2014/02/06 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
2014年统计工作总结
2014/11/21 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
保护环境的宣传语
2015/07/13 职场文书
作文之亲情600字
2019/09/23 职场文书