设为首页 收藏本站
查看: 1012|回复: 0

[经验分享] Python 代码覆盖率统计工具 coverage.py

[复制链接]

尚未签到

发表于 2015-4-26 08:28:43 | 显示全部楼层 |阅读模式
  coverage.py是一个用来统计python程序代码覆盖率的工具。它使用起来非常简单,并且支持最终生成界面友好的html报告。在最新版本中,还提供了分支覆盖的功能。
  官方网站:
  http://nedbatchelder.com/code/coverage/
  win32版本下载地址:
  http://pypi.python.org/pypi/coverage

  或者通过easy-install来安装:




easy_install coverage  

  装好后,在c:\Python25\Scripts\(假设装在c盘)目录会有一个coverage.exe。通过这个exe基本上可以完成我们所有需要的功能。运行一下,如果发现少了那个模块,请先安装easy_install。

Coverage Command Line

  命令行使用说明: 详见:http://nedbatchelder.com/code/coverage/cmd.html

  最关键核心的几个参数使用如下:

  1. run

  执行代码覆盖率统计,只需要通过coverage的run参数执行被统计代码即可。


DSC0000.gif

$ coverage run my_program.py arg1 arg2  跑完后,会自动生成一个覆盖率统计结果文件(data file):.coverage。如果要修改这个默认的文件名也可以,只要设置COVERAGE_FILE环境变量。

  2. report
  有了覆盖率统计结果文件,只需要再运行report参数,就可以在命令里看到统计的结果。




$ coverage report
Name                      Stmts   Exec  Cover
---------------------------------------------
my_program                   20     16    80%
my_module                    15     13    86%
my_other_module              56     50    89%
---------------------------------------------
TOTAL                        91     79    87%  3. html
  最帅最酷的功能了,直接生成html的测试报告。




$ coverage html -d covhtml  生成的报告非常酷,直接关联代码,高亮显示覆盖和未覆盖的代码,支持排序。可以在这个地址预览一下:

  http://nedbatchelder.com/code/coverage/sample_html/
  效果如下:

DSC0001.jpg
DSC0002.jpg
  4. combine
  用过代码覆盖率工具的都知道,多份结果的合并至关重要。combine这个参数我琢磨了很久,开始总是合并不成功。后来终于明白了。执行合并操作很简单,只要把需要合并的覆盖率结果数据文件放在同一个目录里,然后执行:




coverage combine  即可。但是,其实对目录里的结果文件是有要求的,要求就是文件名的格式,需要合并的文件必须有同样的前缀,然后后面跟一个名称(通常是机器名),然后再跟一个数字(通常是进程ID),比如:



.coverage.CoderZh.1234
.coverage.Cnblogs.5678  为了方便执行结果的合并,我们在前面执行统计时,在run参数后面跟一个-p参数,会自动生成符合合并条件的结果文件。




$ coverage run -p my_program.py arg1 arg2  合并后,会再生成一个.coverage文件,然后再执行html查看合并后的报告吧。

  其他几个erase annotate debug 参数就不介绍了。

Coverage API

  除了使用命令行,还可以在python代码中直接调用coverage模块执行代码覆盖率的统计。使用方法也非常简单:




import coverage
cov = coverage.coverage()
cov.start()
# .. run your code ..

cov.stop()
cov.save()  

  coverage的构造函数可以设置结果文件的名称等。有个函数容易弄错,就是use_cache,如果设置的use_cache(0),表示不在硬盘上读写结果文件。如果需要结果数据用来合并,一定要设置use_cache(1)。

  coverage提供一些很好用的函数,如:exclude(排除统计的代码),html_report(生成html报告),report(控制台输出结果)

  下篇讲讲如何在测试django应用时,编写一个自己的test runner来执行代码覆盖率的统计。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60722-1-1.html 上篇帖子: Python Tutorial(三):一个对Python的非正式介绍 下篇帖子: 只用6行代码,用Python在Android上写条形码扫描器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表