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. Pytorch Utils 总结

    Utils 从torch.nn.utils模块 clip_grad_norm_ 裁剪参数迭代的梯度范数. clip_grad_value_ 在指定值处剪辑可迭代参数的梯度. parameters_to ...

  2. 查看Android是否开机启动进入桌面

    adb 或者 串口终端 getprop sys.boot_completed 返回空代表没有进入桌面返回1代表已进入桌面

  3. JS利用浏览器进行语言识别

    JS利用浏览器进行语言识别 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  4. .NET8.0多线程编码结合异步编码示例

    1.创建一个.NET8.0控制台项目来演示多线程的应用 2.快速创建一个线程 3.多次运行程序,可以得到输出结果 这就是多线程的特点 - 当多个线程并行执行时,它们的具体执行顺序是不确定的,除非我们使 ...

  5. springboot-多模块构建-1

    1. 场景描述 先介绍下背景,项目为什么需要用多模块?springmvc难道还不够? (1)设计模式真言:"高内聚.低耦合",springmvc项目,一般会把项目分成多个包:con ...

  6. RPC框架的实现原理,及RPC架构组件详解

    RPC的由来 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时, ...

  7. 揭秘10种主流PLC在ModbusTCP通信中的速度表现!

    大家好!我是付工. 通透!终于把ModbusRTU弄明白了 这样看来,ModbusTCP协议太简单了 太简单了!C#轻松实现Modbus通信 前面给大家介绍了一系列关于Modbus和ModbusTCP ...

  8. window service 2012 R2 0x8007000d

    今天遇到了一个很无语的问题,我的一个.net core 项目,部署到IIS上之后,启动网站,报500.19的错误.尝试了网上N种办法始终没办法解决,最后重装了我的.net core,解决了. 第一步: ...

  9. linux内核 list_for_each_entry

    1. linux内核中的list用法 在linus内核中,list一般这样使用: struct list_head { struct list_head *priv; struct list_head ...

  10. Confusion pg walkthrough Intermediate

    namp ┌──(root㉿kali)-[~] └─# nmap -p- -A 192.168.188.99 Starting Nmap 7.94SVN ( https://nmap.org ) at ...