博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 代码覆盖率统计工具 coverage.py
阅读量:6859 次
发布时间:2019-06-26

本文共 1747 字,大约阅读时间需要 5 分钟。

coverage.py是一个用来统计python程序代码覆盖率的工具。它使用起来非常简单,并且支持最终生成界面友好的html报告。在最新版本中,还提供了分支覆盖的功能。

官方网站:

 

win32版本下载地址:

或者通过easy-install来安装:

easy_install coverage

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

Coverage Command Line

命令行使用说明: 详见:

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

1. run

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

ContractedBlock.gif
$ coverage run my_program.py arg1 arg2

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

2. report

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

ContractedBlock.gif
$ 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的测试报告。

ContractedBlock.gif
$ coverage html 
-
d covhtml

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

 

效果如下:

 

 

4. combine

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

ContractedBlock.gif
coverage combine

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

ContractedBlock.gif
.coverage.CoderZh.
1234
.coverage.Cnblogs.
5678

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

ContractedBlock.gif
$ coverage run 
-
p my_program.py arg1 arg2

合并后,会再生成一个.coverage文件,然后再执行html查看合并后的报告吧。

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

Coverage API

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

ContractedBlock.gif
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来执行代码覆盖率的统计

 

 

本文转自CoderZh博客园博客,原文链接:,如需转载请自行联系原作者

 

你可能感兴趣的文章
【Scala】Scala之Control Structures
查看>>
三星手机拍照,从图库选择照片旋转问题完美解决
查看>>
算法笔记_173:历届试题 斐波那契(Java)
查看>>
菜鸟版JAVA设计模式—外观模式
查看>>
EasyUI----动态拼接EasyUI控件
查看>>
PHP session 跨子域问题总结 ini_set('session.cookie_domain', ".domain.com")
查看>>
Office WPS如何在页眉页脚添加一条横线
查看>>
站在 Android 开发的角度,聊聊 Airbnb 的 Lottie!!!
查看>>
数组去重Demo引出的思考
查看>>
javascript怎么禁用浏览器后退按钮
查看>>
AtomicLong可以被原子地读取和写入的底层long值的操作
查看>>
Android studio 将 Module 打包成 Jar 包
查看>>
coffee script
查看>>
正则表达式大全
查看>>
SVN switch 用法详解
查看>>
Javascript文件下载顺序问题
查看>>
程序员第一定律:关于技能与收入
查看>>
网络通讯合并数据发送的重要性和实现原理
查看>>
Jquery getJSON 实现跨域请求 --- callback
查看>>
Zend Studio (eclipse)使用速度优化
查看>>