在Python中使用coverage.py进行代码覆盖率测试
我正在尝试理解如何为Python脚本运行代码覆盖率。可是我不太明白一个情况,就是当我试图为一个有无限循环的简单脚本运行覆盖率时,会发生什么:
#!/usr/bin/python
print "The only statement!!!"
while True:
pass
在我启动这个脚本的覆盖率检测后,我会终止这个进程,因为它是一个无限循环。如果我尝试查看结果,得到的结果是:
- coverage run sample.py
- kill sample
- 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>
来替代。