python coverage

注意:琐碎的细节非常多,遇到问题多看看官方文档

1、命令行运行
如果程序的运行方式是:python my_program.py arg1 arg2
则替换成如下命令:coverage run my_program.py arg1 arg2
即用coverage脚本替代python命令启动程序。

2、和nosetests联合使用
有两种方式:
(1)coverage run $(which nosetests)
(2)nosetests --with-coverage ,这种方式使用nose builtin coverage模块,比官方coverage模块支持的功能少。使用时,优先考虑第一种方式

3、指定/忽略统计模块,忽略指定代码行
run命令的–source选项可指定哪些目录的文件被统计
coverage run --source=dir1,dir2
还可以指定模块,或在代码中添加指定的注释以忽略某些行代码,具体见官方文档

4、最佳实践
把coverage运行相关的option写在配置文件中,配置文件比命令行支持更多种类的option

5、coverage combine
coverage run 命令会生成 .coverage 文件,文件中存储了覆盖率统计结果。有时我们可能会分开跑不同类型的case,比如单独跑单测,再跑模块case,这样就会生成2个 .coverage 文件。将两个文件重命名为 .coverage.xxx 后移动到同一个目录,使用combine 命令,即可合并统计结果。

注意:coverage 通过文件的绝对路径,判断不同测试中的文件是否是同一个文件,是否能合并,因此不同测试中,源代码的文件位置要一致。如果不一致,可以通过在配置文件中 [path] section 配置。具体见path文档

6、coverage run --parallel-mode
–parallel-mode 模式下创建的数据文件命名方式为 .coverage.machine_name.process_id.random_num,可以直接用于combine操作。这里 --parallel-mode 不是指并发或分布式之类的意思,仅仅是为了从不同的进程收集数据后combine。

7、coverage run -a
coverage.py 每次run会删除已有的 .coverage 文件,如果使用 -a 选项,则不会删除 .coverage,直接修改已有的 .coverage ,将前后两次的统计结果自动合并。

8、Measuring sub-processes
统计覆盖率情况,必须使用coverage.py 代替 python 启动程序,有些sub-process程序会默认使用python启动,导致sub-process部分代码覆盖率无法统计。coverage默认支持python threading(不是thread模块) 模块实现的多线程统计,其他的比如multi-process,gevent等需要另行配置,见文档

9、coverage run --branch
–branch 选项会增加分支覆盖率的统计,具体来说在 coverage report -m 输出的报告中增加 Branch and BrPart (for Partial Branch) 2列。

coverage中分支的定义是,一条语句执行完后,下一条要执行的语句有几种可能,就算几个分支。 比如下面的 if conditon 后,如果conditon 为 true,则下一条执行的语句为 execute_1;否则下一条执行的为 execute_2。尽管没有else,if 后可能执行的语句有2条,因此算2个分支。

if condition:
	exectue_1
execute_2

Branch表示有多少个分支。

BrPart (for Partial Branch):假设一条语句后下一条要执行的可能语句有3条,测试只覆盖了其中1条,就说有2个BrPart,即有2个可能性测试未覆盖。一般报告中 “36->38” 这样箭头连接2个数字的标志,表示 36行后执行38行 这个分支没覆盖。

10、覆盖率计算
(1)不统计分支覆盖率时,覆盖率 = 已执行的代码行数 / 所有可执行的代码行数
(2)统计分支覆盖率时,覆盖率 = actual execution / execution opportunities,具体见官方文档。这个还没看懂…

11、生成报告
在 .coverage 文件所在目录,执行下列命令生成不同格式的报告
coverage report -m
coverage html
coverage xml
coverage annotate:生成带注释的源文件,标记哪些行被执行(>符号),哪些没有(!符号)

12、plugins
coverage 已有 Django,Mako plugin 可直接使用。具体细节及其他plugin见plugin

13、FAQ
FAQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值