跳转到主要内容

基于您定义的任何规则的条件覆盖率!

项目描述

coverage-conditional-plugin

wemake.services Build Status codecov Python Version wemake-python-styleguide

基于您定义的任何规则的条件覆盖率!

有些项目有不同的部分,依赖于不同的环境

  • Python版本,某些代码仅在特定版本上执行,在其他版本上被忽略
  • 操作系统版本,某些代码可能仅在Windows、Mac或Linux上运行
  • 外部包,某些代码仅在安装了某些第三方包时执行

当前最佳实践是在这些位置使用# pragma: no cover。本项目允许使用可配置的pragmas,如果某些条件评估为true,则将这些代码包含在覆盖率中,当条件为false时,则忽略此代码。

阅读 公告帖子

安装

pip install coverage-conditional-plugin

然后您需要将一些额外的配置添加到您的setup.cfg.coveragerc文件中

[coverage:run]
# Here we specify plugins for coverage to be used:
plugins =
  coverage_conditional_plugin

[coverage:coverage_conditional_plugin]
# Here we specify files to conditionally omit:
omit =
  "sys_platform == 'win32'":
      "my_project/omit*.py"
      "my_project/win.py"
# Here we specify our pragma rules:
rules =
  "sys_version_info >= (3, 8)": py-gte-38
  "is_installed('mypy')": has-mypy

或者到您的pyproject.toml

[tool.coverage.run]
# Here we specify plugins for coverage to be used:
plugins = ["coverage_conditional_plugin"]

[tool.coverage.coverage_conditional_plugin.omit]
# Here we specify files to conditionally omit:
"my_project/omit*.py" = "sys_platform == 'win32'"

[tool.coverage.coverage_conditional_plugin.rules]
# Here we specify our pragma rules:
py-gte-38 = "sys_version_info >= (3, 8)"
has-mypy = "is_installed('mypy')"

根据您的需求调整规则!

示例

想象我们有一段这样的代码

try:  # pragma: has-django
    import django
except ImportError:  # pragma: has-no-django
    django = None

def run_if_django_is_installed():
    if django is not None:  # pragma: has-django
        ...

这里可能是您可能会使用的配置

[coverage:coverage_conditional_plugin]
rules =
  "is_installed('django')": has-django
  "not is_installed('django')": has-no-django

当您在安装或不安装django的情况下运行测试时,您将在这两种情况下都有100%的覆盖率。

但是,不同的行将被包含。当安装了django时,它将包含try:if django is not None:条件。

在没有安装django的情况下运行时,它将包含except ImportError:行。

编写pragma规则

pragma规则格式为

"pragma-condition": pragma-name

"pragma-condition"内部的代码将通过eval进行评估。请确保您传递给它的输入是可信的!"pragma-condition"在评估后必须返回bool值。

我们支持在PEP-496中指定的所有环境标记。请参阅字符串版本号部分,以获取可用值。我们还提供了一组额外的标记

  • sys_version_infosys.version_info相同
  • os_environos.environ相同
  • is_installed是我们自定义的函数,它尝试导入传递的字符串,并返回bool
  • package_version是我们自定义的函数,它尝试从pkg_resources获取包版本,并返回其解析版本

使用get_env_info来获取当前环境的值

from coverage_conditional_plugin import get_env_info

get_env_info()

编写省略

省略允许条件性地从覆盖率测量中省略整个文件。

省略的TOML格式为

[tool.coverage.coverage_conditional_plugin.omit]
"pragma-condition" = ["project/prefix*.py", "project/filename.py"]
# or
"pragma-condition" = "project/filename.py"

注意:不支持的ini格式用于omit配置选项,因为没有简单的方法来解析复杂的ini配置。欢迎提交修复此问题的PR!

文件名模式应遵循coverage.py的[run] omit语法。请参阅coverage.py

许可证

MIT

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

coverage_conditional_plugin-0.9.0.tar.gz (10.6 kB 查看哈希值)

上传时间

构建分发

coverage_conditional_plugin-0.9.0-py3-none-any.whl (7.3 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面