coverage.py是一个用来统计python程序代码覆盖率的工具。它使用起来很是简单,而且支持最终生成界面友好的html报告。在最新版本中,还提供了分支覆盖的功能。html
官方网站:python
http://nedbatchelder.com/code/coverage/ django
win32版本下载地址:函数
http://pypi.python.org/pypi/coverage
工具
或者经过easy-install来安装:
测试
装好后,在c:\Python25\Scripts\(假设装在c盘)目录会有一个coverage.exe。经过这个exe基本上能够完成咱们全部须要的功能。运行一下,若是发现少了那个模块,请先安装easy_install。网站
命令行使用说明: 详见:http://nedbatchelder.com/code/coverage/cmd.htmlspa
最关键核心的几个参数使用以下:命令行
1. rundebug
执行代码覆盖率统计,只须要经过coverage的run参数执行被统计代码便可。
跑完后,会自动生成一个覆盖率统计结果文件(data file):.coverage。若是要修改这个默认的文件名也能够,只要设置COVERAGE_FILE环境变量。
2. report
有了覆盖率统计结果文件,只须要再运行report参数,就能够在命令里看到统计的结果。
3. html
最帅最酷的功能了,直接生成html的测试报告。
生成的报告很是酷,直接关联代码,高亮显示覆盖和未覆盖的代码,支持排序。能够在这个地址预览一下:
http://nedbatchelder.com/code/coverage/sample_html/
效果以下:
4. combine
用过代码覆盖率工具的都知道,多份结果的合并相当重要。combine这个参数我琢磨了好久,开始老是合并不成功。后来终于明白了。执行合并操做很简单,只要把须要合并的覆盖率结果数据文件放在同一个目录里,而后执行:
便可。可是,其实对目录里的结果文件是有要求的,要求就是文件名的格式,须要合并的文件必须有一样的前缀,而后后面跟一个名称(一般是机器名),而后再跟一个数字(一般是进程ID),好比:
为了方便执行结果的合并,咱们在前面执行统计时,在run参数后面跟一个-p参数,会自动生成符合合并条件的结果文件。
合并后,会再生成一个.coverage文件,而后再执行html查看合并后的报告吧。
其余几个erase annotate debug 参数就不介绍了。
除了使用命令行,还能够在python代码中直接调用coverage模块执行代码覆盖率的统计。使用方法也很是简单:
coverage的构造函数能够设置结果文件的名称等。有个函数容易弄错,就是use_cache,若是设置的use_cache(0),表示不在硬盘上读写结果文件。若是须要结果数据用来合并,必定要设置use_cache(1)。
coverage提供一些很好用的函数,如:exclude(排除统计的代码),html_report(生成html报告),report(控制台输出结果)
下篇讲讲如何在测试django应用时,编写一个本身的test runner来执行代码覆盖率的统计。