我无法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
到早期版本