【问题标题】:How to omit (remove) virtual environment (venv) from python coverage unit testing?如何从 python 覆盖单元测试中省略(删除)虚拟环境(venv)?
【发布时间】:2019-02-07 13:12:46
【问题描述】:

https://coverage.readthedocs.io/en/coverage-4.5.1a/source.html#source

我的报道还包括“venv”文件夹,我想排除它 无论我做什么,即使使用 --include 或 omit 都没有用

coverage run --omit /venv/* tests.py

这会运行测试,但仍会添加“venv”文件夹和依赖项及其覆盖率百分比

当我这样做时

coverage run --include tests.py

只运行测试 - 它说

Nothing to do.

这很烦人...有人可以帮忙吗?

【问题讨论】:

  • 改用coverage run --include tests.py -m tests.py
  • @Radek 你有没有找到解决方案?我已经尝试了以下建议的所有组合,但无法排除 venv 中的 python 文件。

标签: python python-3.x unit-testing coverage.py python-venv


【解决方案1】:

命令:

coverage run --omit /venv/* tests.py

忽略来自/venv 的覆盖(即:venv 已脱离根目录)。

您应该尝试使用相对目录,例如:

coverage run --omit venv tests.py

【讨论】:

  • 我按照你说的做了第二个命令,得到这个错误:Can't find 'main' module in 'venv/include'
  • 它运行了,但报告中仍有 venv,我已删除 .coverage 文件并再次运行命令,但报告中仍然没有运气 venv。
  • 抱歉,我使用pytest-cov 运行我的覆盖率测试。
  • 已安装 pytest-cov,运行它以查看报告的命令是什么 - py.test --cov=myproj tests/ - 我的项目中没有任何文件夹 - 那么如何那个样子?
  • 找到它,同样的问题,就像其他覆盖一样 - 它使用 .coveragerc 文件,你有 glob - 也通过帮助尝试了一切 - 不起作用 - 我在项目目录中没有文件夹只有 venv ,如果我将该文件 glob [run] omit 放在它说无法从文件中读取的文件中,我不知道如何使其工作,命令或文件 glob - 没有任何作用。感谢您的帮助
【解决方案2】:

--omit 选项的帮助文本显示为 (documentation)

--omit=PAT1,PAT2,...  Omit files whose paths match one of these patterns.
                      Accepts shell-style wildcards, which must be quoted.

如果不引用通配符,它​​将无法工作,因为 bash 在将参数列表传递给覆盖二进制文件之前会扩展通配符。使用单引号来避免 bash 通配符扩展。

在不从 venv/* 中的任何文件中获取覆盖率的情况下运行我的测试:

$ coverage run --omit 'venv/*' -m unittest tests/*.py && coverage report -m
........
----------------------------------------------------------------------
Ran 8 tests in 0.023s

OK
Name                      Stmts   Miss  Cover   Missing
-------------------------------------------------------
ruterstop.py                 84      8    90%   177, 188, 191-197, 207
tests/test_ruterstop.py     108      0   100%
-------------------------------------------------------
TOTAL                       192      8    96%

如果您通常使用纯 python -m unittest 来运行测试,您当然也可以省略测试目标参数。

$ coverage run --omit 'venv/*' -m unittest
$ coverage report -m

【讨论】:

    【解决方案3】:

    * 用于/venv/,它将消除您虚拟环境中的所有文件。

    coverage run tests.py && coverage report --omit=*/venv/*

    【讨论】:

      【解决方案4】:

      对于那些不想在每次执行coverage 时传递--omit 的人,您可以在.coveragercpyproject.toml 中定义以下内容。 .coveragerc 的示例:

      # .coveragerc file content
      [run]
      omit = [
        .venv/*
        tests/*
      ]
      

      pyproject.toml 的示例:

      # pyproject.toml file content
      [tool.coverage.run]
      omit = [
          "tests/*",
          ".venv/*",
      ]
      

      【讨论】:

        猜你喜欢
        • 2017-10-24
        • 1970-01-01
        • 2022-06-14
        • 1970-01-01
        • 2021-11-05
        • 1970-01-01
        • 2020-06-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多