1、tox 能做什么?

细分的用途包括:

创建开发环境

运行静态代码分析与测试工具

自动化构建包

针对 tox 构建的软件包运行测试

检查软件包是否能在不同的 Python 版本/解释器中顺利安装

统一持续集成(CI)和基于命令行的测试

创建和部署项目文档

将软件包发布到 PyPI 或任何其它平台

tox 官方文档中列出了 40 余种使用场景的示例,详细的列表可查看:https://tox.readthedocs.io/en/latest/examples.html

2、tox 怎么配置?

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

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

pyproject.toml

tox.ini

setup.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 值。使用方式: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 等被大家熟知的名字。

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,它在某些方面就存在着不足。

python自动化教程_Python 任务自动化工具 tox 教程相关推荐

  1. cpython教程_python高性能扩展工具-cython教程1快速入门

    Cython不仅仅是一种编程语言.它的起源可以追溯到SAGE数学软件包,它用于提高数学计算性能,例如涉及矩阵的计算.更一般地说,我倾向于将Cython视为SWIG的替代品,为本机代码生成非常好的Pyt ...

  2. python自动化任务_Python任务自动化工具tox使用教程

    1.tox 能做什么? 细分的用途包括: 创建开发环境运行静态代码分析与测试工具自动化构建包针对 tox 构建的软件包运行测试检查软件包是否能在不同的 Python 版本/解释器中顺利安装统一持续集成 ...

  3. python自动化库_Python操作自动化库PyAutoGUI的方法

    Python操作自动化库PyAutoGUI的方法 发布时间:2020-07-23 17:24:46 来源:亿速云 阅读:73 作者:小猪 这篇文章主要讲解了Python操作自动化库PyAutoGUI的 ...

  4. python图形化界面教程_python图形化界面开发教程

    python图形化界面开发教程内容摘要 python图形化界面开发教程白萝卜:泰兴电工教程,白了点,白兰地是在红葡萄酒的基础.基金从业资格教程学校,白开水.苜蓿干草.提摩西干草.兔粮方法:白居易< ...

  5. python自动化控制_python用于自动化控制编程

    Python自动化是做什么的 软件测试里面有Python自动化测试这个课程吗? 在人工智能+大数据的飞速发展的大环境下,Python开发语言日渐火爆,Python自动化测试也将逐渐取代传统的软件测试, ...

  6. python接口测试框架与自动化实战_Python接口自动化从设计到开发,测试框架实战与自动化进阶视频课程...

    Python接口自动化从设计到开发,测试框架实战与自动化进阶视频课程21套高级软件测试,性能测试,功能测试,自动化测试,接口测试,移动端测试,手机测试,WEB测试,渗透测试,测试用例设计,黑盒测试,白 ...

  7. python接收弹幕_Python爬虫自动化爬取b站实时弹幕实例方法

    最近央视新闻记者王冰冰以清除可爱和专业的新闻业务水平深受众多网友喜爱,b站也有很多up主剪辑了关于王冰冰的视频.我们都是知道b站是一个弹幕网站,那你知道如何爬取b站实时弹幕吗?本文以王冰冰视频弹幕为例 ...

  8. 怎么用python自动注册_python selenium自动化(二)自动化注册流程

    需求:使用python selenium来自动测试一个网站注册的流程. 假设这个网站的注册流程分为三步,需要提供比较多的信息: 在这个流程里面,需要用户填入信息.在下拉菜单中选择.选择单选的radio ...

  9. 用python画风车_python接口自动化()一)(实现一款简单的接口自动化框架)

    python接口自动化一(设计一款自己的接口自动化框架) 一.起因: 前面学习过了python接口requests来进行接口测试,但是在框架选择上还是选择的unittest.当接口数量不怎么多时还好, ...

最新文章

  1. mysql 使用EF6.0CodeFirst
  2. 微信小程序实现无限滚动列表
  3. 让软件版本信息自动引用SVN修订版本号
  4. 浅析Unity中的Enlighten与混合光照
  5. 【转】【Unity+Lua】实测如何性能优化(Lua和C#交互篇)
  6. python爬虫科研数据提取_python爬虫数据提取四之pyquery
  7. Ubuntu 10.04 lucid 安装 MariaDB 5.5
  8. css注释_CSS注释示例–如何注释CSS
  9. wordpress插件翻译不生效_谷歌浏览器自带翻译功能如何设置?不喜欢用插件的快来看...
  10. 用html还是xml做网页好,XML与HTML的比较
  11. tomcat端口修改后在Eclipse中启动无效问题解决
  12. FPGA 学习笔记(十一) VGA驱动的实现
  13. R语言排序的基本函数
  14. 个人项目——二柱子程序升级版
  15. 对象布局(JOL)、分配过程以及访问定位
  16. 【C++常用函数】数组或vector排序sort()
  17. #Arduino,去抖动
  18. texworks注释掉多行latex代码。
  19. sheetJs 进行前端解析excel
  20. MNIST手写数字识别准确度提升最全、最实用的方法

热门文章

  1. 企业打开Redis的正确方式,来自阿里云云数据库团队的解读
  2. 真香!8 行代码搞定最大子数组和问题
  3. OpenStack精华问答 | OpenStack的网络类型有哪些?
  4. 白话中台战略:中台是个什么鬼?
  5. SDN精华问答 | 为什么SDN要花这么长时间才被采用?
  6. 携手伙伴谋增长 同心协力齐飞飏
  7. 对象的基础用法和解构赋值
  8. java pinyin4j 首字母_通讯录之按汉字首字母排序 --java--pinyin4J
  9. python多线程同步与互斥_python多线程编程(3): 使用互斥锁同步线程
  10. c语言静态变量存在堆还是栈,c 类 static 函数 什么样是静态变量?嵌入式C语言的堆栈管理如何实现...