标签: tox

当安装了多个版本的python时,tox使用了错误版本的pip

我有一个支持python 2.4,2.6和2.7的构建盒.这导致在他们自己的python安装中根据需要安装各种版本的pips.我正在使用tox测试setup.py.

每当我运行一个时{python2.7_installation_dir}/bin/python setup.py test,这会产生一个.tox目录.在.tox我运行的目录中

py27/bin/pip --version 
pip 1.4.1 from {my_package}/.tox/py27/lib/python2.7/site-packages (python 2.7)


[buildbot@BUILD-SERV-01 .tox]# python2.7 
Python 2.7.6 (default, Nov 20 2013, 15:33:09) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pip
>>> pip.__version__
'1.5.2'
Run Code Online (Sandbox Code Playgroud)

所以.tox目录中的pip版本是1.4.1,其中为我用来执行的python解释器安装的pip setup.py test是1.5.2.这在运行测试时会导致错误,因为它使用pip来安装目录,其中一些来自外部源,而在1.5.2中我们需要为其中一个模块明确设置--allow-external --allow-unverified标志.在1.4.1中不存在,每次通过tox调用测试时都会导致错误.

只有一个python2.7安装,它是从源安装的.但我认为它正在运行pip 1.4.1,但现在已升级为使用1.5.2.如何使用旧版本?是否有任何.pth可能遗留下来的文件或内容需要清理?

我可以tox直接放下并运行pytests,但我更喜欢通过它运行它们tox.
如果您想查看日志,请告诉我,我可以使用日志更新问题.

python pip version setup.py tox

10
推荐指数
1
解决办法
1792
查看次数

测试pytest插件时如何获得覆盖率报告?

语境

我正在更新一个测试覆盖率很差的继承存储库。repo 本身是一个 pytest 插件。我已经将 repo 更改为与tox一起使用pytest-cov,并将“原始”测试转换pytester为在测试插件时按照 pytest 文档中的建议使用。

测试和 tox 构建等效果很好。但是,覆盖率报告了类定义、导入等的错误未命中。这是因为代码本身是作为 pytest 实例化的一部分导入的,并且在测试实际开始之前不会被“覆盖”。

我已经阅读了 pytest 文档、pytest-cov 和覆盖率文档以及 tox 文档,并尝试了几种配置,但都无济于事。我已经用尽了可能会导致我找到一个好的解决方案的谷歌关键字组合池。

存储库布局

pkg_root/
    .tox/
        py3/
            lib/
                python3.7/
                    site-pacakges/
                        plugin_module/
                            supporting_module.py
                            plugin.py
                            some_data.dat
    plugin_module/
        supporting_module.py
        plugin.py
        some_data.dat
    tests/
        conftest.py
        test_my_plugin.py
    tox.ini
    setup.py
    
Run Code Online (Sandbox Code Playgroud)

一些带有评论的相关片段:

配置文件

[pytest]
addopts = --cov={envsitepackagesdir}/plugin_module --cov-report=html
testpaths = tests
Run Code Online (Sandbox Code Playgroud)

这个配置给我一个错误,没有收集数据;在这种情况下不会创建 htmlcov。

如果我只是使用--cov,我会得到(预期的)非常嘈杂的覆盖范围,它显示了功能命中和未命中,但是上面报告了导入、类定义等的错误未命中。

conftest.py

pytest_plugins = ['pytester']  # Entire contents of file!
Run Code Online (Sandbox Code Playgroud)

test_my_plugin.py

def test_a_thing(testdir):
    testdir.makepyfile(
        """
            def test_that_fixture(my_fixture):
                assert my_fixture.foo == …
Run Code Online (Sandbox Code Playgroud)

python coverage.py pytest tox pytest-cov

10
推荐指数
2
解决办法
7148
查看次数

报告多个Python版本的累积覆盖率

我有根据当前版本的Python有条件运行的代码,因为我支持来自同一个包的2.6,2.7和3.3.

我目前使用默认版本的Python生成这样的覆盖率报告:

coverage run --source mypackage setup.py test
coverage report -m
coverage html
Run Code Online (Sandbox Code Playgroud)

这很有用但不理想,因为它只报告Python 2.7的内容.相反,我想生成2.6,2.7 3.2 的测试覆盖率的累积报告.

如何生成多版本覆盖率报告?

旁注:我已经尝试commands = coverage run --source mypackage setup.py test为py26,py27,py33中的每一个输入我的tox.ini,但这似乎不会生成累积覆盖率报告.

python coverage.py tox python-coverage

9
推荐指数
1
解决办法
1360
查看次数

如何在tox中设置环境变量?

我有tox 2.9.1

$ tox --version
2.9.1 imported from /Library/Python/2.7/site-packages/tox/__init__.pyc
registered plugins:
    tox-pyenv-1.1.0 at /Library/Python/2.7/site-packages/tox_pyenv.pyc
Run Code Online (Sandbox Code Playgroud)

文件结构和内容如下

$ tree .
.
??? setup.py
??? test_env.py
??? tox.ini

0 directories, 3 files
Run Code Online (Sandbox Code Playgroud)

setup.py

$ cat setup.py
from setuptools import setup

setup(name="Tox Testing")
Run Code Online (Sandbox Code Playgroud)

tox.ini

$ cat tox.ini
[tox]
envlist = py35
setenv =
    XYZ = 123

[testenv]
deps=pytest
commands=py.test
Run Code Online (Sandbox Code Playgroud)

test_env.py

$ cat test_env.py
import os

def test_env():
    assert os.getenv('XYZ') == 123
Run Code Online (Sandbox Code Playgroud)

当我运行tox命令时,我的测试失败了.

$ tox -v
using tox.ini: /private/tmp/testing/tox.ini
using tox-2.9.1 from /Library/Python/2.7/site-packages/tox/__init__.pyc …
Run Code Online (Sandbox Code Playgroud)

python virtualenv setenv tox

9
推荐指数
3
解决办法
4104
查看次数

Pytest 在使用 tox 时说“ModuleNotFoundError”

我有以下项目结构:

root
|- module
  |- module.py
  |- __init__.py
|- tests
   |- unit
      |- some_test.py
   |- integration
      |- another_test.py
|- conftest.py
|- setup.py
|- tox.ini
Run Code Online (Sandbox Code Playgroud)

当我运行时,python3 module/module.py ...它按预期运行。

但是,当我执行时tox,我得到ModuleNotFoundError: No module named 'dateutil'.

在我的 setup.pyinstall_requires=['python-dateutil']和 tox.ini 中有以下(简化的)内容:

[tox]
envlist   = py{36, 37}
skipsdist = True

[testenv]
deps = pytest
commands = pytest
Run Code Online (Sandbox Code Playgroud)

有没有人知道为什么运行tox会让我找不到模块“dateutil”以及如何修复它?

python pytest tox

9
推荐指数
2
解决办法
3046
查看次数

毒性 0% 覆盖率

我有一个我使用的python项目:

  • 管道
  • 毒物
  • pytest

还有很多。

基本上,我想添加tox到我的 gitlab 管道中。而几乎一切似乎工作,打电话mypyflake8black从TOX工作正常。但是,当我tox -e py37在启用覆盖率的情况下调用(所以我想运行测试)时,会运行测试,我可以看到它们的结果,但是覆盖率是0%100%仅在空__init__文件等上)并且我收到警告:Coverage.py warning: No data was collected. (no-data-collected)

这是我与 pytest 相关的部分tox.ini

[tox]
envlist = flake8,mypy,black,py37

[testenv]
extras = tests
commands=
    pytest --cov -ra --tb=short {posargs}
Run Code Online (Sandbox Code Playgroud)

这是我的.coveragerc

[run]
branch = True
source =
    foo

omit = 
    foo/__init__.py
    foo/__main__.py
    foo/bar/__init__.py
    foo/baz/__init__.py

[report]
exclude_lines =
    pragma: no cover
    if __name__ == .__main__.
show_missing …
Run Code Online (Sandbox Code Playgroud)

python coverage.py pytest python-3.x tox

9
推荐指数
2
解决办法
1370
查看次数

8
推荐指数
1
解决办法
2338
查看次数

如何告诉tox使用PyPI镜像来安装包?

有没有办法告诉tox测试自动化工具在安装所有软件包时使用PyPI镜像(显式测试依赖关系tox.ini和依赖关系setup.py)?

例如,pip install有一个非常有用的--use-mirrors选项,可以将镜像添加到包服务器列表中.

python testing pypi tox

8
推荐指数
3
解决办法
2638
查看次数

使用setup.py test和tox运行Django测试

我构建了一个Django应用程序并用它制作了一个包setuptools.现在,我想做以下事情:

  1. 我想用它来运行所有测试python setup.py test.但是当我发出这个命令时,我得到:

    /usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'install_requires'
    warnings.warn(msg)
    usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
    or: setup.py --help [cmd1 cmd2 ...]
    or: setup.py --help-commands
    or: setup.py cmd --help
    
    error: invalid command 'test'
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我想使用Tox来运行我的测试,但我不知道我应该在command属性中写什么来运行我的Django app测试.

python django unit-testing setuptools tox

8
推荐指数
1
解决办法
2031
查看次数

Tox 丢弃 pythonpath,显式重置它是个好主意吗?

在我的virtualenv激活中,我喜欢设置export PYTHONPATH=<mypath>以便可以直接运行脚本。现在,当我tox从 virtualenv 中运行时,我收到以下令人震惊的红色警告:

WARNING: Discarding $PYTHONPATH from environment, to override specify PYTHONPATH in 'passenv' in your configuration.
Run Code Online (Sandbox Code Playgroud)

我确实理解这个警告,并且我对 tox 覆盖 PYTHONPATH 没什么意见,但这个警告很烦人。我可以离开 venv 并tox在没有它的情况下运行,但这也很烦人。

PYTHONPATH=""运行 tox 时明确归零是个好主意吗?

[testenv]
# Explicitely reset pythonpath to avoid the "discarding" warning
setenv = PYTHONPATH = ""
Run Code Online (Sandbox Code Playgroud)

tox这是否会影响我尚不知道的可能想要对路径执行的其他操作?

python virtualenv tox

8
推荐指数
0
解决办法
1197
查看次数