17

我编写了一个 python 模块,其中大部分都包裹在@numba.jit装饰器中以提高速度。我还为这个模块编写了很多测试,我运行(在 Travis-CI 上)使用py.test. 现在,我正在尝试查看这些测试的覆盖范围,使用pytest-cov,这只是一个依赖的插件coverage(希望将所有这些集成到工作服中)。

不幸的是,似乎numba.jit在所有这些函数上使用会让人coverage认为这些函数从未被使用过——情况确实如此。所以我的测试基本上没有报告覆盖率。这并不是一个巨大的惊喜,因为numba正在获取该代码并对其进行编译,因此代码本身实际上从未被使用过。但我希望有时你会在 python 中看到一些魔力......

有没有什么有用的方法可以结合这两个优秀的工具?如果做不到这一点,是否有任何其他工具可以用来测量 numba 的覆盖率?

[我做了一个最小的工作示例来显示这里的区别。)

4

2 回答 2

6

最好的办法可能是在覆盖测量期间禁用 numba JIT。这依赖于您信任 Python 代码和 JIT 代码之间的对应关系,但无论如何您都需要在某种程度上信任它。

于 2014-11-12T19:03:36.247 回答
3

并不是说这回答了问题,但我认为我应该宣传另一种可能有人感兴趣的工作方式。可能有一些非常漂亮的东西可以使用llvm-cov. 据推测,这必须在 numba 中实现,并且必须对 llvm 代码进行检测,这将需要某处的一些标志。但是既然 numba 知道 python 代码行和 llvm 代码之间的对应关系,那么肯定有比我更聪明的人可以实现的东西。

于 2014-11-12T20:11:47.453 回答