改善与平台相关的python代码的覆盖范围

时间:2017-01-21 10:10:18

标签: python code-coverage pragma

部分代码适用于Windows,部分代码适用于其他平台。我想通过恰当地放置#pragma: no cover来增加代码的覆盖范围。因此,当程序在Windows平台上运行时,应忽略与其他平台相关的代码,反之亦然。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

更好的解决方案是不要忽略这些行,而是测量所有平台上的覆盖范围,然后将它们组合在一起。

您可以在“并行模式”下运行coverage,以便每个数据文件都有一个不同的名称,parallel = true。然后将所有数据文件复制到一个地方,运行“coverage combine”,然后运行“coverage报告”。

答案 1 :(得分:0)

创建.coveragerc并定义在报告生成期间跳过行的规则:

[report]
exclude_lines =
    pragma: no cover

答案 2 :(得分:0)

如果您使用 tox,则有一种解决方案。

首先,将以下内容添加到 tox.ini

# tox.ini
[tox]
envlist = py{36,37,38,39}-{linux,macos,windows}
[testenv]
platform = linux: linux
           macos: darwin
           windows: win32
setenv =
    linux: PLATFORM = linux
    macos: PLATFORM = macos
    windows: PLATFORM = windows

[testenv:py{36,37,38,39}-{linux,macos,windows}]
setenv =
    COVERAGE_RCFILE = {envtmpdir}/coveragerc
commands_pre =
    {envpython} -c 'from pathlib import Path; Path(r"{env:COVERAGE_RCFILE}").write_text(Path(".coveragerc.in").read_text().format(platform="{env:PLATFORM}"))'
commands =
    coverage run -m pytest -v

上面的代码段使 tox 平台感知并创建 Coverage.py 识别的 coveragerc 文件。

然后,将以下内容添加到 .coveragerc.in

[coverage:report]
exclude_lines =
    pragma: no cover {platform}

此行设置基于平台的排除行。现在,用 # pragma: no cover windows# pragma: no cover linux# pragma: no cover macos 标记您的代码行,以将这些行排除在特定平台上的执行之外。

现在运行 tox -e py39-windows(或其他 Python 版本和 Oses,例如 tox -e py38-linux)将测量基于平台的覆盖率。

参考:https://www.topbug.net/blog/2020/12/19/platform-dependent-python-coverage-test-with-tox/