对于Jedi我们希望生成test coverage。stackoverflow中有一个related question,但没有帮助。
我们用py.test作为测试运行程序。但是,我们无法将导入和其他“导入”内容添加到报表中。例如,__init__.py
总是报告为未覆盖:
Name Stmts Miss Cover
--------------------------------------------------
jedi/__init__ 5 5 0%
[..]
很明显,该文件正在导入,因此应报告为已测试。
我们开始这样的测试[*]:
py.test --cov jedi
如您所见,我们正在使用pytest-coverage
。
那么,如何正确计算像__init__.py
这样的文件的覆盖率呢?
[*]我们还尝试在不使用--doctest-modules
(从pytest.ini
中删除)的情况下启动测试,并在py.test -p pytest_cov --cov jedi
之前激活覆盖模块。他们两个都不工作。
我已经悬赏了。请试着在绝地内部修复它。它是公开的。
@hynekcer给了我正确的想法。但基本上最简单的解决方案就在别的地方:
摆脱
pytest-cov
!使用
相反!!!这样,您就可以对当前的py.test配置运行一个覆盖,它工作得非常好!这也是哲学上正确的方法:让每个程序做好一件事-
py.test
运行测试并检查代码覆盖率。这听起来像是在咆哮,但确实如此。
pytest-cov
已经有一段时间不能正常工作了。有些测试失败了,就因为我们用了它。截至2014年,pytest cov似乎已经易手。
py.test --cov jedi test
似乎又是一个有用的命令(查看注释)。但是,你不需要使用它。但与xdist
结合使用可以加快覆盖率报告的速度。我通过简化导入依赖关系的this patch和命令将测试覆盖率固定为94%:
未覆盖的行只在条件命令或一些不太常用的函数中使用,但所有的头都被完全覆盖。
问题是,测试配置
test/conftest.py
确实是由依赖项提前导入的,几乎是项目中的所有文件。conftest文件还定义了在运行测试之前应该设置的其他命令行选项和设置。因此,如果pytest_cov插件忽略了与此文件一起导入的所有内容,我认为它可以正常工作,尽管这很痛苦。我也从报告中排除了__init__.py
和settings.py
,因为它们很简单,覆盖范围很广,但由于conftest的依赖性,它们也过早地被导入。在我的例子中,所有的测试都在运行,但是覆盖率是0%。
解决方法是:
结果正确之后。
在过去,
py.test
命令有一些问题,导入某些内容和设置PYTHONPATH
env var是解决方案。这次对我也很管用。我在
awslogs
中的真实例子首先未设置
PYTHONPATH
:结果覆盖率为0%。
然后我设置
PYTHONPATH
:然后重新运行测试:
现在是覆盖率90%。
警告:操纵
PYTHONPATH
可能会产生奇怪的副作用。目前我遇到的问题是,在构建可分发包时,基于pbr
的包正在创建egg目录,如果PYTHONPATH
设置为“.”,它会自动将与egg相关的包视为已安装。为此,我停止使用pytest-cov
,而是按照建议使用coverage
工具。相关问题 更多 >
编程相关推荐