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