在Python中使用coverage.py进行代码覆盖率测试

2 投票
1 回答
2345 浏览
提问于 2025-04-18 18:33

我正在尝试理解如何为Python脚本运行代码覆盖率。可是我不太明白一个情况,就是当我试图为一个有无限循环的简单脚本运行覆盖率时,会发生什么:

#!/usr/bin/python

print "The only statement!!!"

while True:
    pass

在我启动这个脚本的覆盖率检测后,我会终止这个进程,因为它是一个无限循环。如果我尝试查看结果,得到的结果是:

  1. coverage run sample.py
  2. kill sample
  3. coverage report -m

名称 语句数 丢失 覆盖率 丢失的 -------------------------------------

我没有得到任何覆盖率报告。我是不是做错了什么根本的事情?

1 个回答

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> 来替代。

撰写回答