欢迎来到tox自动化项目

愿景:在Python中标准化测试

tox 旨在自动化和标准化Python中的测试。它是简化Python软件打包、测试和发布过程的更大愿景的一部分。

什么是tox?

tox是一种通用 virtualenv 管理和测试命令行工具,可用于:

  • 检查软件包是否使用不同的Python版本和解释器正确安装

  • 在每个环境中运行测试,配置您选择的测试工具

  • 充当持续集成服务器的前端,极大地减少了样板,并合并了CI和基于shell的测试。

基本实例

首先,安装 tox 具有 pip install tox 。然后将有关项目的基本信息以及要在其中运行项目的测试环境放入 tox.ini 文件就驻留在您的 setup.py 文件:

# content of: tox.ini , put in same dir as setup.py
[tox]
envlist = py27,py36

[testenv]
# install pytest in the virtualenv where commands will be executed
deps = pytest
commands =
    # NOTE: you can run any command line tool here - not just tests
    pytest

您还可以尝试生成 tox.ini 自动创建文件,方法是运行 tox-quickstart 然后回答几个简单的问题。

要使用Python2.7和Python3.6对项目进行sdist打包、安装和测试,只需键入::

tox

并观察发生的情况(您的环境中必须安装python2.7和python3.6,否则您将看到错误)。当你跑步的时候 tox 第二次,您会注意到它的运行速度要快得多,因为它跟踪viralenv细节,并且不会重新创建或重新安装依赖项。您可能还想结账 tox配置和使用示例 以获得更多的想法。

系统概述

_images/tox_flow.png

tox 工作流程图

tox大致遵循以下阶段:

  1. 配置: load tox.ini 并将其与来自命令行的选项和操作系统环境变量合并。

  2. 打包 (可选):通过调用以下命令创建当前项目的源分发

    python setup.py sdist
    

    请注意,对于此操作,将使用与安装TOX的环境相同的Python环境(因此,您需要确保它包含您的构建依赖项)。对于没有 setup.py .

  3. 环境 -对于每个 tox 环境(例如 py27py36 )执行以下操作:

    1. environment creation: create a fresh environment, by default virtualenv is used. tox will automatically try to discover a valid Python interpreter version by using the environment name (e.g. py27 means Python 2.7 and the basepython configuration value) and the current operating system PATH value. This is created at first run only to be re-used at subsequent runs. If certain aspects of the project change, a re-creation of the environment is automatically triggered. To force the recreation tox can be invoked with -r/--recreate.

    2.第二步。 安装 (可选):安装在 deps 配置部分,然后是较早打包的源代码发行版。默认情况下, pip 用于安装软件包,但是您可以通过以下方式对其进行自定义 install_command 。注意事项 pip 不会更新项目依赖项(在 install_requiresextras 剖面图 setup.py )如果虚拟环境中已存在任何版本;因此,我们建议您在项目依赖关系更改时重新创建您的环境。

    三。 命令 :按指定顺序运行指定的命令。只要它们中的任何一个的退出代码不是零,就停止,并将环境标记为失败。注意,命令以单个短划线字符开头表示忽略退出代码。

  4. 报告 打印出每个 tox 环境的结果报告:

    ____________________ summary ____________________
    py27: commands succeeded
    ERROR:   py36: commands failed
    

    只有在所有环境都成功运行的情况下,tox才会返回退出代码 0 (成功)。在这种情况下,您还将看到以下消息 congratulations :) .

TOX将为您提供环境隔离:它将剥离所有未通过以下方式指定的操作系统环境变量 passenv 。此外,它还将改变 PATH 变量,以便您的命令首先在当前活动的TOX环境中解析。通常,路径中的所有可执行文件都可在 commands ,但如果没有明确允许通过 allowlist_externals .

当前功能

  • 单调乏味的Python相关测试活动的自动化

  • 针对许多解释器和依赖项配置测试您的Python包

    • 自动自定义(重新)创建 virtualenv 测试环境

    • 安装您的 setup.py 将基于项目的项目添加到每个虚拟环境中

    • 测试工具不可知:以统一的方式运行pytest、nash或unittest

  • plugin system 用简单的钩子修改tox执行。

  • 用途 pipsetuptools 默认情况下。支持通过配置安装程序命令 install_command = ARGV

  • cross-Python compatible :CPython-2.7、3.5及更高版本,Jython和 pypy.

  • cross-platform :Windows和Unix风格的环境

  • 与持续集成服务器集成 喜欢 Jenkins (以前称为Hudson),并帮助您避免boilerpltis和特定于平台的构建步骤。

  • 与devpi完全互操作性 :与集成在一起,并用于在 devpi 系统,一个通用的PyPI索引服务器和发布管理工具。

  • driven by a simple ini-style config file

  • 文件化的 examplesconfiguration

  • 简明扼要的报道 关于工具调用和配置错误

  • 专业的 supported

  • 支架 using different / multiple PyPI index servers