小编use*_*632的帖子

Tox涵盖多个python版本

这是项目和输出的链接,可用于重现我在下面描述的问题。

我使用的覆盖面TOX对蟒蛇的多个版本。我的tox.ini文件看起来像这样:

[tox]
envlist =
    py27
    py34

[testenv]
deps =
    coverage

commands =
    coverage run --source=modules/ -m pytest
    coverage report -m
Run Code Online (Sandbox Code Playgroud)

我的问题是,覆盖范围只能使用一个版本的python(在我的情况下为py27)运行,而不能同时使用py27和py34。每当我有依赖于python版本的代码执行时,这就是一个问题,例如:

def add(a, b):
    import sys
    if sys.version.startswith('2.7'):
        print('2.7')
    if sys.version.startswith('3'):
        print('3')
    return a + b
Run Code Online (Sandbox Code Playgroud)

针对上述代码运行覆盖率将错误地报告py27和py34的第6行(“ print('3')”)为“缺少”。对于py34,应该只缺少此字符。

我知道为什么会这样:覆盖已安装在我的基本操作系统(使用python2.7)上。因此,在运行Tox时,它会注意到Coverage已安装,并且从基本OS继承了Coverage,而不是将其安装在它创建的virtualenv中。

对于py27,这很好而且很花哨,但在py34的覆盖率报告中导致错误的结果。我有一个临时的变通办法:我需要一个较早版本的coverage(相对于基本OS上安装的版本),以便Tox将被迫在virtualenv中安装一份单独的coverage副本。例如

[testenv]
deps =
    coverage==4.0.2
    pytest==2.9.0
    py==1.4.30
Run Code Online (Sandbox Code Playgroud)

我不喜欢这种解决方法,但这是我目前发现的最好方法。关于强制tox在virtualenv中安装当前版本的Coverage的任何建议,即使我已经在基本OS上安装它了吗?

code-coverage python-3.x tox

4
推荐指数
2
解决办法
1725
查看次数

标签 统计

code-coverage ×1

python-3.x ×1

tox ×1