Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Coverage.py仅在导入期间检测调用,而不是在测试执行期间检测调用_Python_Pytest_Code Coverage_Coverage.py_Pytest Cov - Fatal编程技术网

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?@momo与
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
    ...