使用coverage.py在python中进行代码覆盖

时间:2014-08-26 09:38:19

标签: python code-coverage coverage.py python-coverage

我试图理解python脚本的运行覆盖率。我无法理解我尝试为具有无限循环的简单脚本运行覆盖的场景:

#!/usr/bin/python

print "The only statement!!!"

while True:
    pass

在调用此脚本的覆盖范围后,我将终止此过程,因为它是一个无限循环,如果我尝试得到结果,我会得到:

  1. coverage run sample.py
  2. kill sample
  3. 报道报告-m
  4. Name Stmts Miss Cover Missing -------------------------------------

    我没有收到任何报道。我在做一些根本错误的事情吗?

1 个答案:

答案 0 :(得分:5)

coverage需要能够在程序结束时写出数据,如果它无法处理退出信号,那么它就不会生成报告。

所以这取决于你如何杀死你的进程以及coverage如何处理信号 - 当我使用Ctrl + C(即发送SIGINT)来中断sample.py

时,这对我来说很好用
$ coverage run sample.py
The only statement!!!
Traceback (most recent call last):
  File "sample.py", line 5, in <module>
    while True:
KeyboardInterrupt

$ coverage report -m
Name     Stmts   Miss  Cover   Missing
--------------------------------------
sample       3      0   100%

如果您使用的kill实用程序没有选项,那么您默认发送SIGTERM,请尝试kill -INT <pid>