1. tox基本介绍

1.1 tox是什么?

tox 是一个用于管理 Python 项目的自动化测试和环境管理工具。它的主要功能是创建虚拟环境运行项目的测试套件,tox能够让我们在同一个Host上自定义出多套相互独立且隔离的python环境,每套虚拟环境中可能使用了不同的 Python 拦截器/环境变量设置/第三方依赖包,tox 最典型的应用就是用于测试 Python 程序的兼容性,tox是openstack社区最基本的测试工具,比如python程序的兼容性、UT等,以确保项目在不同环境下的稳定性和一致性。

目标:提供最先进的自动化打包,测试和发布功能

  • 作为持续集成服务器的前端,大大减少测试所需时间
  • 检查软件包能否在不同的python版本下正常安装
  • 在不同版本的python环境下运行测试代码

1.2 tox能做什么?

  • 创建虚拟环境:Tox 可以自动创建虚拟环境并运行项目的测试套件,确保项目在不同环境下的兼容性。
  • 验证多python版本的兼容性:Tox 可以在多个 Python 版本下运行项目的测试,从而确保项目的跨版本兼容性。
  • 运行单元测试:您可以配置 Tox,使其能够运行自定义的测试命令、代码风格检查、文档生成等任务。
  • 检查代码风格:Tox 可以配置静态代码分析工具,如 Flake8、Pylint 等,帮助开发者规范代码风格。
  • 集成化:Tox 可以与其他测试工具和持续集成系统(例如 Jenkins、Travis CI 等)集成,使得测试结果能够轻松地与团队共享和管理。
  • 简化测试流程:Tox 可以简化项目的测试流程,减少开发人员在测试环境配置和管理上的工作量。

1.3 tox安装

pip install tox

'''
安装过程中需要提前安装的一些依赖包
yum install python-devel
yum install libffi-devel
yum install openssl-devel
yum install gcc
yum install gcc-c++
'''

2. tox配置文件详解

一个典型的tox配置文件示例:

# --------------------------------------------全局配置-------------------------------------------------
[tox]
envlist = py37, py38, lint
requires =
# 用法1:指定特定的python包及版本
tox>=4
requests>=2.25
numpy==1.19.3
# 用法2:指定额外的软件依赖
pytest
flake8
# 用法3:指定从外部软件包清单文件安装, 如下:使用-r参数指定从requirements.txt文件中读取依赖项列表进行安装
-rrequirements.txt
# 指示tox是否跳过创建源纷纷包(sdist),某些情况下,不需要生成分发包(如:只进行测试时)
skipsdist = True
# 指定tox的最低版本要求
minversion = 1.6
# 指定Python包索引服务器
indexserver =
default = https://pypi.doubanio.com/simple # ---------------------------------------通用环境配置----------------------------------------------
[testenv]
# 指定是否以开发者模式安装包,开发者模式下安装包便于调试
usedevelop = true
# 指定是否跳过安装依赖项的步骤
skip_install = false
# 用于指定虚拟机环境使用的python版本
basepython = python3.8
# 指定哪些环境变量可以被传递到tox创建的测试环境中,如下示例:通过如下配置,测试脚本test_script.py需要使用环境变量DATABASE_URL来连接数据库进行测试
passenv = DATABASE_URL
# 指定测试环境中要安装的依赖包
deps =
pytest
requests # 在测试运行时设置特定的环境变量
setenv = TEST_ENV=1
# 在测试命令执行之前运行的命令
# commands_pre = echo "Starting tests..."
# 定义在测试环境中要运行的命令
commands =
# 场景示例1:运行测试
pytest tests/
# 场景示例2:PEP8代码风格检查
flake8 tests/
# 场景示例3:检查测试覆盖率
coverage run -m pytest
# 场景示例4:在测试之前构建项目
python setup.py install
# 场景示例5:运行自定义shell或python脚本
./run_custom_tests.sh
# 场景示例6:TypeHint检查
mypy /src
# 在测试命令执行之后运行的命令
commands_post = echo "Tests completed."
# 测试环境可调用的外部命令白名单
# 示例1:表示允许测试环境中条用任何外部命令
whitelist_externals = *
# 示例2:表示只允许cp和rm命令执行,其他命令不允许
whilelist_externals =
cp
rm
# 用于指定在安装测试环境时执行的自定义安装命令,默认情况下,tox会使用pip来安装项目的依赖项,但如果指定了install_command参数,则会执行install_command中定义的命令
install_command = pip install -U {opts} {packages} # --------------------------------------特定环境配置------------------------------------------
# 一下testenv:py37表示一个特定的测试环境配置部分,它是基于通用的[testenv]配置的,这种方式可以为特定的测试环境定义特定的行为,而不会影响其他测试环境的配置
[testenv:py37]
basepython = python3.7
deps =
pytest
requests
commands =
pytest tests/ # 以下环境名称lint是一个通用术语,用于指代各种代码静态分析工具
[testenv:lint]
deps = flake8
commands = flake8 your_project/
setenv =
LINT_ENV=development # pytest测试框架配置
[pytest]
addopts = --verbose --maxfail=1 # 配置专门用于测试代码覆盖率的测试环境
[coverage]
run = coverage run -m pytest
report = coverage report -m

3. tox内置变量

  • {toxinidir}:tox.ini 文件所在的目录路径。
  • {env}:当前测试环境的名称。
  • {envdir}:当前测试环境的虚拟环境目录路径。
  • {posargs}:传递给 tox 命令的额外参数。
  • {envtmpdir}:当前测试环境的临时目录路径。
  • {toxworkdir}:tox 工作目录路径,用于存储临时文件和日志等。

4. tox常用命令

  1. tox:运行 Tox 测试环境。默认情况下,会运行配置文件中定义的所有环境。

  2. tox -e envname:运行指定环境。envname 是在配置文件中定义的环境名称。

  3. tox -c path/to/config:使用指定的配置文件运行 Tox。通过这个选项,你可以指定使用不同的配置文件。

  4. tox -r:重建虚拟环境。这个命令会强制 Tox 重新创建虚拟环境,有助于解决环境问题。

  5. tox -l:列出可用环境。这个命令会列出在配置文件中定义的所有环境,方便你查看可用选项。

  6. tox --notest:跳过运行测试。使用这个选项可以让 Tox 只创建虚拟环境而不运行测试。

  7. tox --installpkg path/to/package:安装指定的包到虚拟环境中。这个命令可以让你手动安装额外的包到 Tox 管理的虚拟环境中。

  8. tox --showconfig:显示最终的 Tox 配置。这个命令可以帮助你查看最终生效的配置信息。

博文参阅:

【Python自动化测试环境管理】tox的更多相关文章

  1. python自动化测试(2)-自动化基本技术原理

    python自动化测试(2) 自动化基本技术原理 1   概述 在之前的文章里面提到过:做自动化的首要本领就是要会 透过现象看本质 ,落实到实际的IT工作中就是 透过界面看数据. 掌握上面的这样的本领 ...

  2. python自动化测试(4)-使用第三方python库技术实现

    python自动化测试(4)-使用第三方python库技术实现 1   概述 关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 ...

  3. python自动化测试(3)- 自动化框架及工具

    python自动化测试(3) 自动化框架及工具 1   概述 手续的关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 后面所谈到 ...

  4. 优雅的使用python之环境管理

    优雅的使用python之环境管理 缘起 情景1:不同python版本的管理 同一电脑上的多个python版本之前的管理,为了突出问题的普遍存在,下面是有人在segmentfault上提的问题. 摘自: ...

  5. (学习网址)Python 自动化测试

    1.Python自动化测试地址 http://www.wtoutiao.com/author/python-selenium.html 2.unittest参考网址: 1)python自动化测试报告H ...

  6. python 自动化测试资料

    python 自动化测试资料: http://yunpan.cn/QXVvwVJsAsPnb

  7. selenium + python 自动化测试环境搭建

    selenium + python 自动化测试 —— 环境搭建 关于 selenium Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操 ...

  8. android - python 自动化测试 移动互联网 - SegmentFault

    android - python 自动化测试 移动互联网 - SegmentFault splinter

  9. Python自动化测试 -ConfigParser模块读写配置文件

    C#之所以容易让人感兴趣,是因为安装完Visual Studio, 就可以很简单的直接写程序了,不需要做如何配置. 对新手来说,这是非常好的“初体验”, 会激发初学者的自信和兴趣. 而有些语言的开发环 ...

  10. python自动化测试

    python自动化测试 欢迎光临 python自动化测试 小站! 小站基于IT行业,重点关注python,软件自动化测试,测试等. 联系方式 飞信 372818219 相关的群:python开发自动化 ...

随机推荐

  1. WebSocket从入门到精通,半小时就够!

    本文原题"WebSocket:5分钟从入门到精通",作者"程序猿小卡_casper",原文链接见文末参考资料部分.本次收录时有改动. 1.引言 自从HTML5里 ...

  2. 🎉 夜莺监控突破一万 star,这是汗水,也是鞭策

    夜莺监控项目在上周突破了一万 star,算是一个小小的里程碑.在开源领域,通常把 star 数量看作项目的繁荣指标,star 数量越多,说明愿意关注你的人越多.这个数字的背后,是一群人对你的鼓励.认可 ...

  3. Android RNDIS gadget Windows免驱修改方案

    过程简单粗暴,拿到竞品的设备,然后使用UsbTreeView查看设备的相关描述符. 对比发现接口抽象描述符和接口描述符不一致,直接修改Linux RNDIS gadget 驱动,将驱动中有关的两个描述 ...

  4. ASP.NET Core 中使用 Redis 实现分布式缓存:Docker、IDistributedCache、StackExchangeRedis

    安装和配置docker (略)........... ASP.NET Core 使用分布式缓存 ASP.NET Core 中,支持使用多种数据库进行缓存,ASP.NET Core 提供了统一的接口给开 ...

  5. 日志数据采集-Flume

    1. 前言 在一个完整的离线大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核心之外,还需要数据采集.结果数据导出.任务调度等不可或缺的辅助系统,而这些辅助工具在hadoop ...

  6. Golang-接口7

    http://c.biancheng.net/golang/interface/ Go语言接口声明(定义) Go语言不是一种 "传统" 的面向对象编程语言:它里面没有类和继承的概念 ...

  7. DVWA靶场Authorisation Bypass (未授权绕过) 漏洞通关教程及源码审计

    Authorisation Bypass 授权绕过(Authorisation Bypass)是一种严重的安全,通过利用系统的或错误配置,绕过正常的访问控制机制,获得未经授权的访问权限.这种可能导致敏 ...

  8. 头文件中 ifndef/define/endif 有什么用?

    1. 相同的声明可以多次出现,重复声明不是错误! 定义不可以,无论是单个文件还是多个文件,某个特定作用域(比如全局变量),不可以重复定义变量. 2. 类/结构体的定义可以在多个文件中多次出现,但是不可 ...

  9. 218:解释LINUX文件系统权限

  10. “翼”鸣惊人,天翼云两篇论文被ACM ICPP 2024收录!

    *日,由天翼云科技有限公司弹性计算产品线天玑实验室撰写的两篇论文<PheCon: Fine-Grained VM Consolidation with Nimble Resource Defra ...