1

我无法coverage.py正确测量我的 Python 包的代码覆盖率。无论我尝试什么,我只能覆盖导入期间运行的代码,即package/__init__.py从那里调用的代码,以及在执行测试期间调用的所有代码的 0% 覆盖率。该软件包作为可编辑安装安装pip install -e .在 Docker 容器内。

如果我剥离项目以创建一个最小示例,问题就会消失,这表明它一定是由实际项目中的某些特定原因引起的,但不幸的是我无法共享实际代码(与工作相关)。

我已经没有尝试什么的想法(请参阅下面的尝试修复)。可能是什么问题呢?

一般项目结构

/app/
  setup.py
  package/
    __init__.py
    module1.py
    ...
  tests/
    __init__.py
    conftest.py
    test1.py
    ...

版本信息

  • Python:3.7.2 里面的一个 Docker 容器基于python:3.7-slim
  • pytest:6.0.1
  • pytest-cov:2.10.0
  • 覆盖范围:5.2.1

我尝试过的事情

  • 检查在我的测试中运行的代码的路径,inspect.getsourcefile(func)以确保使用正确的源文件,而不是在其他地方安装的副本
  • 通过pytest-cov插件或直接使用运行测试/覆盖命令coverage run --source package -m pytest tests/ && coverage report
  • 从不同的目录运行,例如/app//app/tests//
  • 环境PYTHONPATH="."
  • 按照 Pytest 文档中的建议将目录移动package到单独的src目录中
  • 删除导入conftest.py以避免在覆盖分析开始之前导入
  • 在测试中而不是在测试模块级别导入包代码
  • 降级coverage.py到早期版本
4

0 回答 0