【问题标题】:how to make py.test --cov skip virtualenv directory如何使 py.test --cov 跳过 virtualenv 目录
【发布时间】:2016-04-11 14:54:01
【问题描述】:

我应该关心我的测试如何涵盖我在项目中使用的外部库吗?

py.test --cov 显示如何覆盖所有文件,包括我的 virtualenv 目录中的文件。如何使输出仅显示我编写的模块的覆盖范围?

【问题讨论】:

    标签: python-2.7 virtualenv pytest test-coverage


    【解决方案1】:

    在项目的根目录中,创建文件.coveragerc,其中包含:

    [run]
    omit = path_to_libs_to_omit/*
    

    根据您的设置,您可能需要将--cov-config=path/to/.coveragerc 添加为 py.test 命令的选项。

    您可以使用更多选项to configure coverage

    【讨论】:

    • 值得一提的是,您可以使用逗号分隔的列表[run] omit = path_to_libs_to_omit/**,path_to_other_libs_to_omit/** 拥有多个路径
    • 您还可以为omit 定义多个路径作为每行一个路径(如果您要排除很多内容,那就太好了)。
    【解决方案2】:

    您应该将您的模块名称添加到--cov 命令行选项,例如表单pytest-cov 文档:

    py.test --cov=myproj tests/
    

    这将覆盖范围限制为模块 myproj 及其所有子模块。

    【讨论】:

      【解决方案3】:

      @alexamici 答案是 virtualenvs 的正确答案,但为了完整起见,添加 pyproject.toml(python 项目的建议配置文件)设置:

      [tool.coverage.run]
      omit = [
          "file/to/exclude.py",
          "other/file.py",
          "some/path/*"
          ]
      

      【讨论】:

        【解决方案4】:

        这是我设法做到的: pytest.py

        [pytest]
        python_files = tests.py test_*.py *_tests.py
        addopts = -v -p no:warnings --nomigrations --cov=. --no-cov-on-fail
        

        coveragerc

        [run]
        omit = venv/*
        

        【讨论】:

          【解决方案5】:

          单线,

          echo -e "[run]\nomit = venv/*" > .coveragerc && pytest -v --cov
          

          如果您在 CI 中使用它,或者您不想仅仅因为 'venv' 而将 .coveragerc 添加到您的 git 存储库中,这将非常方便。

          【讨论】:

            猜你喜欢
            • 2012-06-22
            • 2015-07-13
            • 2014-12-22
            • 1970-01-01
            • 1970-01-01
            • 2016-03-05
            • 2012-11-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多