Python Coverage.py仅在导入期间检测调用,而不是在测试执行期间检测调用
我无法获得Python Coverage.py仅在导入期间检测调用,而不是在测试执行期间检测调用,python,pytest,code-coverage,coverage.py,pytest-cov,Python,Pytest,Code Coverage,Coverage.py,Pytest Cov,我无法获得coverage.py来正确测量Python包的代码覆盖率。无论我尝试什么,我只得到导入期间运行的代码的覆盖率,即包/_init__;py和从那里调用的代码,以及执行测试期间调用的所有代码的0%覆盖率。该软件包以可编辑安装方式安装,带有pip install-e.在Docker容器中 如果我剥离项目以创建一个最小的示例,问题就会消失,这表明问题一定是由实际项目中的特定内容引起的,但不幸的是,我无法共享实际代码(与工作相关) 我已经没有了尝试什么的想法(请参阅下面尝试的修复)。有什么问题
coverage.py
来正确测量Python包的代码覆盖率。无论我尝试什么,我只得到导入期间运行的代码的覆盖率,即包/_init__;py和从那里调用的代码,以及执行测试期间调用的所有代码的0%覆盖率。该软件包以可编辑安装方式安装,带有pip install-e.
在Docker容器中
如果我剥离项目以创建一个最小的示例,问题就会消失,这表明问题一定是由实际项目中的特定内容引起的,但不幸的是,我无法共享实际代码(与工作相关)
我已经没有了尝试什么的想法(请参阅下面尝试的修复)。有什么问题吗
一般项目结构
版本信息
- Python:3.7.2在基于
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=“.”
- 将
目录移动到单独的包
目录src
- 在
conftest.py中删除导入以避免在覆盖率分析开始之前导入
- 在测试内部而不是在测试模块级别导入包代码
- 将
coverage.py降级到早期版本
pytest--cov-package-tests/
(或类似,取决于我从哪个目录运行)。我不确定这是否是打字错误,但缺少等号--cov=package
。感谢您的建议!事实上,我已经尝试了这两种方法,它们似乎是等效的。--cov package
和--cov=package
都列出了包中我要测试的所有文件,但覆盖率为0%。pytest是否发现您的测试?它们被执行了吗?如何运行pytest-cov?@momo和pytest--cov-package-tests/
(或类似,取决于我从哪个目录运行)。我不确定这是否是一个输入错误,但缺少一个等号--cov=package
。谢谢你的建议!事实上,我已经尝试了这两种方法,它们似乎是等效的。--cov package
和--cov=package
都列出了包中我要测试的所有文件,但覆盖率为0%。pytest是否发现您的测试?他们被处决了吗?
/app/
setup.py
package/
__init__.py
module1.py
...
tests/
__init__.py
conftest.py
test1.py
...