python - 如何使用 Travis-CI 运行 Tox

标签 python unit-testing travis-ci python-unittest tox

如何使用 Tox 测试不同的 Python 版本来自Travis-CI ?

我有一个tox.ini:

[tox]
envlist = py{27,33,34,35}
recreate = True

[testenv]
basepython =
    py27: python2.7
    py33: python3.3
    py34: python3.4
    py35: python3.5
deps =
    -r{toxinidir}/pip-requirements.txt
    -r{toxinidir}/pip-requirements-test.txt
commands = py.test

它在多个 Python 版本中运行我的 Python 单元测试并且运行良好。

我想在 Travis-CI 中设置一个构建,以便在我将更改推送到 Github 时自动运行它,所以我有一个 .travis.yml:

language: python
python:
-   "2.7"
-   "3.3"
-   "3.4"
-   "3.5"
install:
-   pip install tox
script:
-   tox

这在技术上似乎可行,但它在每个版本的 Python 中重复运行我所有的测试......来自每个版本的 Python。因此,需要 5 分钟的构建现在需要 45 分钟。

我尝试从我的 yaml 文件中删除 python 列表,因此 Travis 只会运行一个 Python 实例,但这会导致我的 Python3.5 测试失败,因为找不到 3.5 解释器.显然,这是一个 known limitation因为 Travis-CI 不会安装 Python3.5,除非您在配置中指定确切的版本...但它不会为其他版本执行此操作。

有没有办法解决这个问题?

最佳答案

为此,我会考虑使用 tox-travis。这是一个允许使用 Travis CI 的多个 python 版本和 Tox 的完整可配置性的插件。 为此,您将配置 .travis.yml 文件以使用 Python 进行测试:

sudo: false
language: python
python:
    - "2.7"
    - "3.4"
install: pip install tox-travis
script: tox

这将运行适当的测试环境,它们是任何声明的环境,默认情况下使用 py27 或 py34 作为名称的因素。如果没有环境与给定因素匹配,则 Py27 或 py34 将用作后备。

Further Reading

关于python - 如何使用 Travis-CI 运行 Tox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37016688/

相关文章:

Python,在for循环中有一个条件

java - 使用 Mockito 验证递归方法调用的最佳实践

java - 使用 JUnit 测试图像文件

javascript - 比较具有相同属性但混合在一起的两个对象不遵循字母规则

Python 代码块图未显示在 R Markdown 中

python - f2py 与 Fortran netcdf

PHP 测试在本地通过,但在使用 Composer、PSR-4 自动加载的 Travis CI 上失败

php - Travis CI 只执行单个测试文件 phpunit

python - scipy.linalg.svd : shapes of VT and U: what is full_matrices and why is it needed?

django - 在 travis 构建中选择正确的 postgresql 版本